【发布时间】:2019-07-26 17:58:23
【问题描述】:
使用 range() 代替列表可能非常方便且切中要害,但如果将 range() 分配给变量,pylint 会发出警告。 (范围内建非迭代)
范围对象类似于列表(具有长度、可以随机访问、可迭代等),那么是否存在此代码错误的情况?
from typing import *
def fn(a: Sequence[int]) -> None:
for x in a:
print(x)
r = range(10, 100)
fn(r)
编辑(添加):
这样做的一个动机是传递范围而不是到处传递(开始,结束)对
【问题讨论】:
-
没什么问题,只是不是很 Pythonic
-
能否请您详细说明一下?恕我直言,它简洁,利用语言和高效(与 ie
tuple(range(10,100))相比)我什至可以(实际上,我认为它会更好)让 a 的类型为Sequence[int]而不是 Iterable -
这里有些人比我更了解这一点,但我的感觉是您正在创建一个范围,然后创建一个函数来迭代它。为什么不在函数中创建它?范围的唯一用途是在迭代时。
-
@JoshFriedlander 什么不是 Python 的?在需要
range对象的地方使用range对象是完全 Pythonic 的。我倾向于说,忽略 pylint。 -
@JoshFriedlander 不,
range是一个容器。它的用途不仅仅是迭代它。
标签: python python-3.x pylint