2012-07-07 9 views
7

私はcollections.pyのソースコードを昨日読んでいました。プロパティの名前を_propertyに変更する理由

namedtuple関数では、template文字列が生成され、次に一時的な名前空間にexecが追加されます。

名前空間dictでは、propertyは、_propertytupleから_tupleに名前が変更されました。

私はこれの背後にある理由が不思議です。この名前を変更すると、どのような問題が回避できますか?

答えて

9

一般に、名前空間をきれいに保つために、アンダースコア名が標準ライブラリで使用されることがあります。 _tupleの場合

あなたは、フィールド名として「タプル」を使用することを許可しているので、それが必要だった:

>>> Example = namedtuple('Example', ['list', 'tuple', 'property']) 
>>> e.list 
[10, 20, 30] 
>>> e.tuple 
(40, 50, 60) 
>>> e.property 
'Boardwalk' 
+2

@JBernardo、あなたはRHがPythonのコア開発者の一人だと知っていますか?私はええ、彼はこれについて間違っているかもしれませんが、私は彼が経験から話していると思われることを意味します。 – senderle

+4

私は* namedtuple *のコードの作成者です:-) –

+0

だから私は "with"、 "as"と "except"をフィールド名として使いたいと言っているのですか? :) –

0

それは、キーワード名の競合を回避できます。

たちは['when', 'who', 'why', 'where', 'with']

すなわち虚リストを持っていたと言います。通訳者が嫌になることなくmy_name_tuple.withを入力することはできません。

名前付きタプルのドキュメントをよく読んでください。

+0

Python2.7では' rename = True' 'with 'のような無効な名前は' _4'のようなものに置き換えられます。あまりにもうまくいけば、これはクラス定義コンテキストで実行される 'x = property(...)'のようなステートメントには影響しません。 – satoru

関連する問題