1
0

More than 3 years have passed since last update.

pythonのジェネレータのコードサンプル

Last updated at Posted at 2020-03-03

事の発端

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}

感想

特になし。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0