2014-03-31 15 views
21
from collections import namedtuple 

Point=namedtupe('whatsmypurpose',['x','y']) 
p=Point(11,22) 
print(p) 

Ausgang:Relevanz des Typnamen in namedtuple

whatsmypurpose(x=11,y=22) 

Was die Relevanz/Verwendung von 'whatsmypurpose' ist?

+2

prüfen: http://stackoverflow.com/questions/2970608/what-are-named-tuples-in-python "Es lesbarer becames" - Also, Lesbarkeit ist es. Und mehr: "Sie sollten benannte Tupel anstelle von Tupeln verwenden, wo immer Sie denken, dass die Objektnotation Ihren Code pythonischer und leichter lesbar macht." –

+1

mögliche Duplikate von [Verwendung von Klassennamen in Python] (http://stackoverflow.com/questions/10482512/use-of-class-typenames-in-python) – b4hand

Antwort

6

namedtuple() ist eine Factory-Funktion für Tupel. Hier ist whatmypurpose der Typname. Wenn Sie ein benanntes Tupel erstellen, wird intern eine Klasse mit diesem Namen (whatsmypurpose) erstellt.

Sie können dies feststellen, indem Sie das ausführliche Argument wie:

Point=namedtuple('whatsmypurpose',['x','y'], verbose=True) 

Sie können auch Typ (p) versuchen, dies zu überprüfen.

+0

3.3 fügt auch das Attribut '_source' hinzu, falls Sie möchte die Definition "drucken" oder "ausführen". – eryksun

+0

Ich kann nicht auf die Klasse zugreifen. dh withmypurpose() oben ist nicht definiert. Ist die Klasse tatsächlich irgendwo definiert oder ist Typname nur für Anzeigezwecke? – Gadi

+0

@Gadi Point ist die Referenz (Variable) für die Klasse "whatsmypurpose" im obigen Beispiel. Im Allgemeinen ist der Klassenname ('Point .__ name__') zu Anzeigezwecken (versuche' print (Point (1, 2)) '). – zvyn

4

'whatsmypurpose' gibt der neuen Unterklasse ihren Typnamen. Aus der Dokumentation:

collections.namedtuple (False Typname, FIELD_NAMES, ausführliche = False, umbenennen =)
Gibt eine neue Tupel Unterklasse namens Typnamen.

Hier ist ein Beispiel:

>>> from collections import namedtuple 
>>> Foo = namedtuple('Foo', ['a', 'b']) 
>>> type(Foo) 
<class 'type'> 
>>> a = Foo(a = 1, b = 2) 
>>> a 
Foo(a=1, b=2) 
>>> Foo = namedtuple('whatsmypurpose', ['a', 'b']) 
>>> a = Foo(a = 1, b = 2) 
>>> a 
whatsmypurpose(a=1, b=2) 
>>> 
Verwandte Themen