无法理解namedtuple语法

时间:2017-03-12 19:12:03

标签: python python-2.7

我正在尝试使用collections.namedtuple。我浏览了文档并遇到了以下语法。

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

以下也可以正常使用

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

我遇到了以下语法,就像这样。

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

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

如果我尝试执行以下操作

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

它会引发错误说明

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

但这似乎工作得很好。

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

我无法理解语法,以及两个属性如何合并在一起。

1 个答案:

答案 0 :(得分:3)

因为:

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

等同于:

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

Here是文档:

  

多个相邻的字符串或字节文字(由空格分隔),   可能使用不同的引用约定,允许和它们的   意思与它们的连接相同。因此,"hello" 'world'是   相当于"helloworld"

请注意,这只是python语法的一部分,对namedtuple没什么特别的。

在链接中,我们有以下内容:

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

注意空格。