首页 > 解决方案 > 如果您在 Python 中迭代列表或元组,它会有所不同吗?

问题描述

我目前正在尝试wemake-python-styleguide并找到WPS335

使用列表、字典和集合没有多大意义。您可以改用元组。使用推导隐式地创建了一个难以阅读和处理的两级循环。

它给出了这个例子:

# Correct:
for person in ('Kim', 'Nick'):
    ...

# Wrong:
for person in ['Kim', 'Nick']:
    ...

这纯粹是个人偏好,还是有更多关于使用元组的说明?我只能考虑速度,但我无法想象这会有所作为。

我想我看到更多的人使用列表,我想知道是否有理由改变它。

标签: python

解决方案


使用列表而不是元组作为常量在 CPython 中没有任何区别。在某些版本中,两者都编译为元组。

>>> dis.dis("""
... for person in ["Kim", "Nick"]:
...     ...
... """)
  2           0 SETUP_LOOP              12 (to 14)
              2 LOAD_CONST               0 (('Kim', 'Nick'))
              4 GET_ITER
        >>    6 FOR_ITER                 4 (to 12)
              8 STORE_NAME               0 (person)

  3          10 JUMP_ABSOLUTE            6
        >>   12 POP_BLOCK
        >>   14 LOAD_CONST               1 (None)
             16 RETURN_VALUE

请注意列表文字是如何转换为LOAD_CONST (('Kim', 'Nick'))元组指令的。


至于偏好,CPython 更喜欢tuple. 如果你有选择,你也应该这样做。


推荐阅读