私はcollections.py
のソースコードを昨日読んでいました。プロパティの名前を_propertyに変更する理由
namedtuple
関数では、template
文字列が生成され、次に一時的な名前空間にexec
が追加されます。
名前空間dictでは、property
は、_property
とtuple
から_tuple
に名前が変更されました。
私はこれの背後にある理由が不思議です。この名前を変更すると、どのような問題が回避できますか?
私はcollections.py
のソースコードを昨日読んでいました。プロパティの名前を_propertyに変更する理由
namedtuple
関数では、template
文字列が生成され、次に一時的な名前空間にexec
が追加されます。
名前空間dictでは、property
は、_property
とtuple
から_tuple
に名前が変更されました。
私はこれの背後にある理由が不思議です。この名前を変更すると、どのような問題が回避できますか?
一般に、名前空間をきれいに保つために、アンダースコア名が標準ライブラリで使用されることがあります。 _tupleの場合
あなたは、フィールド名として「タプル」を使用することを許可しているので、それが必要だった:
>>> Example = namedtuple('Example', ['list', 'tuple', 'property'])
>>> e.list
[10, 20, 30]
>>> e.tuple
(40, 50, 60)
>>> e.property
'Boardwalk'
それは、キーワード名の競合を回避できます。
たちは['when', 'who', 'why', 'where', 'with']
すなわち虚リストを持っていたと言います。通訳者が嫌になることなくmy_name_tuple.with
を入力することはできません。
名前付きタプルのドキュメントをよく読んでください。
Python2.7では' rename = True' 'with 'のような無効な名前は' _4'のようなものに置き換えられます。あまりにもうまくいけば、これはクラス定義コンテキストで実行される 'x = property(...)'のようなステートメントには影響しません。 – satoru
@JBernardo、あなたはRHがPythonのコア開発者の一人だと知っていますか?私はええ、彼はこれについて間違っているかもしれませんが、私は彼が経験から話していると思われることを意味します。 – senderle
私は* namedtuple *のコードの作成者です:-) –
だから私は "with"、 "as"と "except"をフィールド名として使いたいと言っているのですか? :) –