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']。
这背后有原因吗?
乍一看,我会说单字符串版本效率较低,因为它需要分割输入。该序列对我来说似乎也更具可读性。哪一个效率更高?
是,提供str
涉及到.replace
和.split
,然后将其内容映射到str
,see source:
if isinstance(field_names, str):
field_names = field_names.replace(',', ' ').split()
field_names = list(map(str, field_names))
显然,这比提供列表要花费更多时间。尽管,这应该成为性能瓶颈,但它仅在对生成类的namedtuple的初始调用期间执行;后续通话无需执行任何操作。简而言之,请不要担心此处的性能。