namedtuple字段名称:单个字符串还是序列?

问题描述 投票:2回答:2

Python允许在命名元组的声明中提供field_names作为字符串序列或单个字符串,每个名称用空格和/或逗号分隔。

根据官方文档,Python 2中的首选方法似乎是按顺序提供名称:

field_names是一个字符串序列,例如['x','y']。另外,field_names可以是单个字符串,每个fieldname用空格和/或逗号分隔,例如'x y'或'x,y'。

Python 3中,首选项已更改为单字符串版本:

field_names是一个字符串,每个字段名之间用空格和/或逗号,例如'x y'或'x,y'。另外,field_names可以是字符串序列,例如['x','y']。

这背后有原因吗?

乍一看,我会说单字符串版本效率较低,因为它需要分割输入。该序列对我来说似乎也更具可读性。哪一个效率更高?

python performance python-3.x namedtuple
2个回答
2
投票

是,提供str涉及到.replace.split,然后将其内容映射到strsee source

if isinstance(field_names, str):
    field_names = field_names.replace(',', ' ').split()
field_names = list(map(str, field_names))

显然,这比提供列表要花费更多时间。尽管,这应该成为性能瓶颈,但它仅在对生成类的namedtuple的初始调用期间执行;后续通话无需执行任何操作。简而言之,请不要担心此处的性能。


0
投票
我可以提出一个赞成'a b'方法的论点:它暗示着字段名称中不允许使用空格。 [a,b]的方式使读者相信允许使用空格,这是不正确的。更糟糕的是,https://docs.python.org/3/library/collections.html#collections.namedtuple中的官方namedtuple文档没有直接说禁止使用空格。它只说“任何有效的Python标识符都可用于字段名(...)”。
© www.soinside.com 2019 - 2024. All rights reserved.