2017-03-12 3 views
1

Ich versuche collections.namedtuple zu verwenden. Ich ging durch die Dokumentation und stieß auf folgende Syntaxen.Kann die Nametuple-Syntax nicht verstehen

Person = namedtuple('Person', 'name,age,gender') 
anup = Person(name='Anup', age=21, gender='male') 

auch folgende Werke fein

ich auf folgende Syntax kam, die so etwas wie das war.

Person = namedtuple('Person', 'name age gender' 'address phone') 

Ref: https://github.com/tensorflow/models/blob/master/textsum/batch_reader.py#L29

Wenn ich versuche, die folgende

anup = Person(name='Anup', age=21, gender='male', address='xyz', phone='1234') 

es wirft einen Fehler zu tun, die besagt,

TypeError: __new__() got an unexpected keyword argument 'gender' 

aber dies scheint absolut in Ordnung zu arbeiten.

anup = Person(name='Anup', age=21, genderaddress='xyz', phone='1234') 

Ich bin nicht in der Lage, die Syntax zu verstehen, und wie die beiden Attribute miteinander verschmolzen sind.

+2

Sie schreiben nicht ein Komma zwischen 'gender'' und' 'address' so Python concats die beiden Strings ... –

+0

Stringliterale auf Nebeneinander verbunden –

+0

@WillemVanOnsem Sie unter dem Link einen Blick haben? Warum ist das erledigt, wenn es nicht richtig funktioniert? – utkbansal

Antwort

3

Da dies:

Person = namedtuple('Person', 'name age gender' 'address phone') 

entspricht dies:

Person = namedtuple('Person', 'name age genderaddress phone') 

Here ist die Dokumentation:

Multiple benachbarte Saite oder Bytes Literale (Leerzeichen getrennt), möglicherweise sind verschiedene Kontingentkonventionen zulässig, und ihre Bedeutung ist das gleiche wie ihre Verkettung. Somit ist "hello" 'world' äquivalent zu "helloworld".

Also beachten Sie, dies ist nur ein Teil der Python-Syntax, und nichts besonderes über namedtuple.

In den Link haben wir die folgenden: der Raum

ModelInput = namedtuple('ModelInput', 
         'enc_input dec_input target enc_len dec_len ' 
         'origin_article origin_abstract')  ^

Hinweis.

+0

Beachten Sie, dass dies eine allgemeine Regel der Python-Syntax ist und nichts speziell mit nametuple zu tun hat. –

+0

@DanielRoseman ja, ich werde das klarstellen. –

Verwandte Themen