事の発端
pythonで設定ファイルを作っていて、ジェネレータの使い方をすぐに忘れてしまうので、備忘のためにサンプルを作成・公開しました。
コードサンプル
def bundle_dict_set(dic, num_max, part_name_of_key, init_value=0):
for i in range(1, num_max + 1):
dic[str(i) + part_name_of_key] = init_value
def page_data_gene():
for i in range(1, 3 + 1):
yield str(i) + "ページ目の色"
yield str(i) + "ページ目の幅"
def bundle_gene_dict_set(dic, init_value=0):
for key in list(page_data_gene()):
dic[key] = init_value
def main():
dic_1 = {}
dic_2 = {}
dic_3 = {}
print("=========↓for文で辞書を作成する場合=========================")
for i in range(1, 3 + 1):
dic_1[str(i) + "ページ目の色"] = 0
dic_1[str(i) + "ページ目の幅"] = 0
print(dic_1)
print("\n=========↓for文を関数で実行して辞書を作成する場合===========")
bundle_dict_set(dic_2, 3, "ページ目の色")
bundle_dict_set(dic_2, 3, "ページ目の幅")
print(dic_2)
print("\n=========↓ジェネレータを使って、辞書を作成する場合==========")
bundle_gene_dict_set(dic_3)
print(dic_3)
if __name__ == "__main__":
main()
実行結果
=========↓for文で辞書を作成する場合=========================
{'1ページ目の色': 0, '1ページ目の幅': 0, '2ページ目の色': 0, '2ページ目の幅': 0, '3ページ目の色': 0, '3ページ目の幅': 0}
=========↓for文を関数で実行して辞書を作成する場合===========
{'1ページ目の色': 0, '2ページ目の色': 0, '3ページ目の色': 0, '1ページ目の幅': 0, '2ページ目の幅': 0, '3ページ目の幅': 0}
=========↓ジェネレータを使って、辞書を作成する場合==========
{'1ページ目の色': 0, '1ページ目の幅': 0, '2ページ目の色': 0, '2ページ目の幅': 0, '3ページ目の色': 0, '3ページ目の幅': 0}
追記)さらに、コードをかっこよくしてみた
def bundle_dict_set(dic, num_max, part_name_of_key, init_value=0):
for i in range(1, num_max + 1):
dic[str(i) + part_name_of_key] = init_value
def page_data_gene(*args, max_num):
for i in range(1, max_num + 1):
for arg in list(*args):
yield str(i) + str(arg)
def bundle_gene_dict_set(dic, *key_list, max_num, init_value=0):
for key in list(page_data_gene(*key_list, max_num=max_num)):
dic[key] = init_value
def main():
tpl = ("ページ目の色", "ページ目の幅")
page_num = 2
dic_1 = {}
dic_2 = {}
dic_3 = {}
print("=========↓for文で辞書を作成する場合=========================")
for i in range(1, page_num + 1):
dic_1[str(i) + tpl[0]] = 0
dic_1[str(i) + tpl[1]] = 0
print(dic_1)
print("\n=========↓for文を関数で実行して辞書を作成する場合===========")
for tp in list(tpl):
bundle_dict_set(dic_2, page_num, tp)
print(dic_2)
print("\n=========↓ジェネレータを使って、辞書を作成する場合==========")
bundle_gene_dict_set(dic_3, tpl, max_num=page_num)
print(dic_3)
if __name__ == "__main__":
main()
実行結果
=========↓for文で辞書を作成する場合=========================
{'1ページ目の色': 0, '1ページ目の幅': 0, '2ページ目の色': 0, '2ページ目の幅': 0}
=========↓for文を関数で実行して辞書を作成する場合===========
{'1ページ目の色': 0, '2ページ目の色': 0, '1ページ目の幅': 0, '2ページ目の幅': 0}
=========↓ジェネレータを使って、辞書を作成する場合==========
{'1ページ目の色': 0, '1ページ目の幅': 0, '2ページ目の色': 0, '2ページ目の幅': 0}
感想
特になし。