JSON (または YAML など) のシリアル化の方がおそらく優れていますが、辞書を既に Python 構文でテキスト ファイルに書き込んでいて、変数名のバインドを完了している場合は、代わりにそれを .py ファイルに書き込むことができます。次に、その python ファイルはインポート可能で、そのまま使用できます。そのファイルでグローバルとして直接使用できるため、「辞書を返す関数」アプローチは必要ありません。例えば
# generated.py
please_dont_use_dict_as_a_variable_name = {'Adam': 'Room 430', 'Bob': 'Room 404'}
それよりも:
# manually_copied.py
def get_dict():
return {'Adam': 'Room 430', 'Bob': 'Room 404'}
唯一の違いは、 [1] が単一の共有オブジェクトであるのmanually_copied.get_dict
に対し、辞書の新しいコピーが毎回提供されることです。generated.please_dont_use_dict_as_a_variable_name
これは、辞書を取得した後にプログラムで辞書を変更する場合に問題になる可能性がありますが、1 つを他の辞書とは別に変更する必要がある場合は、いつでもcopy.copy
またはを使用して新しいコピーを作成できます。copy.deepcopy
[1] dict
、list
、str
、int
、map
などは、一般的に不適切な変数名と見なされます。その理由は、これらがすでに組み込みとして定義されており、非常に一般的に使用されているためです。したがって、そのような名前を付けると、少なくともコードを読んでいる人 (しばらく離れていたあなたを含む) に認知的不協和を引き起こすことになりますdict
。ここで通常行うことを意味します。」またdict
、コードの一部がtype dict
を使用しようとしているのに、辞書オブジェクトを取得しているため、ある時点で、オブジェクトが呼び出し可能ではない (または何か) という、腹立たしい解決すべきバグが報告される可能性が非常に高くなります。dict
代わりに名前にバインドされます。