迭代一定次数而不存储迭代次数
这个问题已经在这里有了答案:
- 是否可以在没有迭代器变量的情况下为范围循环实现Python? 15个答案
我想知道是否可以在不将循环迭代号存储在任何地方的情况下执行一定数量的操作。
例如,假设我要向控制台打印两条i
消息。 现在我知道我可以做到:
for i in range(2):
print "hello"
但随后i
变量将采用值0
和1
(我并不是很需要)。 有没有一种方法可以在不将那些不需要的值存储在任何地方的情况下实现同一目标?
未使用变量的成语(由许多其他语言共享)是单个下划线_
。代码分析器通常不会抱怨_
未使用,程序员会立即知道这是i_dont_care_wtf_you_put_here
的捷径。没有办法进行迭代。 没有项目变量-正如Python的Zen所说,“特殊情况不足以打破规则”。
exec 'print "hello";' * 2
应该可以工作,但是我对此感到kind愧。
更新:想到另一个:
for _ in " "*10: print "hello"
好吧,我认为您在问题中提供的forloop效果差不多,但是我想指出,可以将必须分配的未使用变量分配给名为_
的变量,这是“丢弃” 分配的值。 尽管_
参考将保留您提供的值,但代码短绒和其他开发人员将理解您没有使用该参考。 所以这是一个例子:
for _ in range(2):
print('Hello')
其他人则解决了无法完全避免for _ in range(200):
循环中的迭代变量的问题,但是有一些选择可以减少工作量。 repeat
毕竟必须生成一大堆数字,这需要进行少量工作。 如果您甚至想避免这种情况,可以使用for _ in range(200):
反复获取相同(忽略)的值,这无需创建/检索不同的对象:
from itertools import repeat
for _ in repeat(None, 200): # Runs the loop 200 times
...
在微基准测试中,这比for _ in range(200):
的运行速度更快,但是如果循环体做有意义的工作,那简直是九牛一毛。 与将一些匿名序列乘以循环循环不同,repeat
仅花费很少的设置成本,并且没有依赖于长度的内存开销。
尽管我完全同意delnan的回答,但这并非不可能:
loop = range(NUM_ITERATIONS+1)
while loop.pop():
do_stuff()
但是请注意,这不适用于任意列表:如果列表中的第一个值(弹出的最后一个值)不等于False
,则在下一遍将获得另一个迭代和一个异常:IndexError: pop from empty list
。此外, 您的列表(loop
)在循环后将为空。
只是出于好奇的缘故。 ;)
抱歉,但是为了迭代任何语言(包括Python和英语)中的任何内容,必须存储一个索引。 是否在变量中。 找到一种方法来掩盖python在内部跟踪for循环的事实并不会改变它的事实。 我建议仅保留它。
这将打印“ hello” 3次,而不存储i
...
[print('hello') for i in range(3)]
你可以简单地做
print 2*'hello'
for word in ['hello'] * 2:
print word
它不是惯用的Python,但您尝试做的也不是。
事实证明,使用dummy *(起始词为dummy)作为变量与_具有相同的技巧。 但是,您不必理会已经定义且有时使用的变量或函数。