python - 如果您在 Python 中迭代列表或元组,它会有所不同吗?
问题描述
我目前正在尝试wemake-python-styleguide并找到WPS335:
使用列表、字典和集合没有多大意义。您可以改用元组。使用推导隐式地创建了一个难以阅读和处理的两级循环。
它给出了这个例子:
# Correct:
for person in ('Kim', 'Nick'):
...
# Wrong:
for person in ['Kim', 'Nick']:
...
这纯粹是个人偏好,还是有更多关于使用元组的说明?我只能考虑速度,但我无法想象这会有所作为。
我想我看到更多的人使用列表,我想知道是否有理由改变它。
解决方案
使用列表而不是元组作为常量在 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
. 如果你有选择,你也应该这样做。
推荐阅读
- python - 在 Python 中检索标签属性
- php - 在没有父容器的情况下使用 DOMDocument 前置 HTML 文本
- tensorflow - 如何将一个网络的输出连接到 Keras 中另一个网络的输入?
- python - 尝试从 Anbima API 检索数据
- react-native - 错误:model.execute(dict) 中提供的 dict['ToFloat'] 的形状必须为 [-1,-1,-1,3],但为 [200,150,3]
- python - 如何使用 Keras 循环创建预测模型?
- p5.js - p5.js 中的音高转换
- java - 浓咖啡。引起:junit.framework.AssertionFailedError: 'with error: is "..." does not match the selected view
- arrays - 如何在不指定 C 语言大小的情况下创建字符串数组?
- ios - UIButton 当前颜色检查