python - namedtuple 字段名称 : single string or sequence?

标签 python performance python-3.x namedtuple

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

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

field_names are a sequence of strings such as ['x', 'y']. Alternatively, field_names can be a single string with each fieldname separated by whitespace and/or commas, for example 'x y' or 'x, y'.

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

field_names are a single string with each fieldname separated by whitespace and/or commas, for example 'x y' or 'x, y'. Alternatively, field_names can be a sequence of strings such as ['x', 'y'].

这背后有什么原因吗?

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

最佳答案

是的,在将其内容映射到 str 之前,提供 str 涉及 .replace.split , see source :

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

这显然比您提供列表要花费更多的时间。虽然,这应该永远不会成为性能瓶颈,它只会在对生成类的 namedtuple 的初始调用期间执行;随后的调用不必对它做任何事情。简而言之,不要担心这里的性能。

关于python - namedtuple 字段名称 : single string or sequence?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40910078/

相关文章:

c# - 什么时候分配一个新线程?

java - 为什么处理排序数组比未排序数组*慢*? (Java 的 ArrayList.indexOf)

python - 如何获取用户输入列表,通过随机计数器运行它,然后输出结果

python - 在 numpy 中获取 polyfit 的反函数

python - 使用 numpy.average 的加权平均值

python - 提取 python 字典中的第 n 个键?

python-3.x - 如何修复 : cx_Oracle. DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python

python-3.x - 适用于 Azure 机器学习 SDK 的 Python SDK v2(预览版)- 如何从 WorkspaceOperations 检索工作区

python - 在 python 3 中将十六进制解码为十进制的问题

Python:在 Numba 中创建和复制 numpy 数组?