2012-07-07 1 views
7

Ich habe gestern den Quellcode von collections.py gelesen.Gründe für das Umbenennen der Eigenschaft in _property

In der Funktion namedtuple wird eine template Zeichenfolge generiert und dann exec ed in einem temporären Namespace.

Im Namensraum dict wird property in _property und tuple in _tuple umbenannt.

Ich frage mich, was ist der Grund dafür. Welche Probleme vermeidet diese Umbenennung?

Antwort

9

Im Allgemeinen werden die Unterstrichnamen manchmal in der Standardbibliothek verwendet, um einen Namespace sauber zu halten.

Im Falle _tuple, es war notwendig, weil Sie „Tupel“ als Feldnamen sind erlaubt zu verwenden:

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

@JBernardo, wissen Sie, RH ist einer der Python-Core-Entwickler richtig? Ich meine, ja, er könnte damit falsch liegen, aber ich vermute, dass er aus Erfahrung spricht. – senderle

+4

Es ist wahr, ich bin der Autor des Codes für * namedtuple * :-) –

+0

Also bin ich nicht weit davon entfernt zu sagen, ich will "mit", "as" und "außer" als Feldnamen dann? :) –

0

Es Stichwort Namenskonflikte vermeidet.

Sagen wir

dh eine imaginäre Liste der ['when', 'who', 'why', 'where', 'with']

hatte. man kann my_name_tuple.with nicht eingeben, ohne dass der Interpreter auf Autsch geht.

Lesen Sie die Dokumente auf dem Nametuple gründlich und Sie sollten es bekommen.

+0

zu vermeiden. In Python2.7 können Sie 'rename = True' setzen dass ungültige Namen wie 'mit' durch etwas wie' _4' ersetzt werden. Geht man autsch oder nicht, hat das keine Auswirkung auf die Anweisung wie 'x = property (...)', die im Klassendefinitionskontext ausgeführt wird. – satoru

Verwandte Themen