报价性能提示:
xrange
是一个生成器对象,基本上相当于下面的 Python 2.3 代码:
def xrange(start, stop=None, step=1):
if stop is None:
stop = start
start = 0
else:
stop = int(stop)
start = int(start)
step = int(step)
while start < stop:
yield start
start += step
除了它是用纯C实现的。
他们说这in
对xrange
对象效率低下,因为如果方法失败,它会in
尝试迭代对象。__contains__
从会员测试详细信息:
对于没有定义__contains__()
但确实定义
的类,如果在迭代时产生了一些值__iter__()
,则为真。x in y
z
x == z
y
xrange
没有实现__contains__
,为了在xrange(N + 1)
in
运算符中“找到”元素 N 必须执行 N 次迭代,所以
N in xrange(N + 1)
逻辑上等价于
for n in xrange(N + 1):
if n == N:
break
而且效率不高。
not in
效率低下,因为in
效率低下。
请注意,包含测试in
的操作员的性能不会影响循环的性能。这是2个不同的东西。for
其实"in"
在语法规则中为for
循环(如下图)
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
是固定的,不是操作员。