迭代一定次数而不存储迭代次数

这个问题已经在这里有了答案:

  • 是否可以在没有迭代器变量的情况下为范围循环实现Python? 15个答案

我想知道是否可以在不将循环迭代号存储在任何地方的情况下执行一定数量的操作。

例如,假设我要向控制台打印两条i消息。 现在我知道我可以做到:

for i in range(2):
    print "hello"

但随后i变量将采用值01(我并不是很需要)。 有没有一种方法可以在不将那些不需要的值存储在任何地方的情况下实现同一目标?

BorrajaX asked 2020-07-22T20:56:19Z
10个解决方案
46 votes

未使用变量的成语(由许多其他语言共享)是单个下划线_。代码分析器通常不会抱怨_未使用,程序员会立即知道这是i_dont_care_wtf_you_put_here的捷径。没有办法进行迭代。 没有项目变量-正如Python的Zen所说,“特殊情况不足以打破规则”。

answered 2020-07-22T20:56:37Z
15 votes
exec 'print "hello";' * 2

应该可以工作,但是我对此感到kind愧。

更新:想到另一个:

for _ in " "*10: print "hello"
recursive answered 2020-07-22T20:57:01Z
12 votes

好吧,我认为您在问题中提供的forloop效果差不多,但是我想指出,可以将必须分配的未使用变量分配给名为_的变量,这是“丢弃” 分配的值。 尽管_参考将保留您提供的值,但代码短绒和其他开发人员将理解您没有使用该参考。 所以这是一个例子:

for _ in range(2):
    print('Hello')
ThorSummoner answered 2020-07-22T20:57:22Z
5 votes

其他人则解决了无法完全避免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仅花费很少的设置成本,并且没有依赖于长度的内存开销。

ShadowRanger answered 2020-07-22T20:57:47Z
4 votes

尽管我完全同意delnan的回答,但这并非不可能:

loop = range(NUM_ITERATIONS+1)
while loop.pop():
    do_stuff()

但是请注意,这不适用于任意列表:如果列表中的第一个值(弹出的最后一个值)不等于False,则在下一遍将获得另一个迭代和一个异常:IndexError: pop from empty list。此外, 您的列表(loop)在循环后将为空。

只是出于好奇的缘故。 ;)

Walter answered 2020-07-22T20:58:16Z
1 votes

抱歉,但是为了迭代任何语言(包括Python和英语)中的任何内容,必须存储一个索引。 是否在变量中。 找到一种方法来掩盖python在内部跟踪for循环的事实并不会改变它的事实。 我建议仅保留它。

user3399731 answered 2020-07-22T20:58:36Z
1 votes

这将打印“ hello” 3次,而不存储i ...

[print('hello') for i in range(3)]
Rasmus Pedersen answered 2020-07-22T20:58:56Z
1 votes

你可以简单地做

print 2*'hello'
sairam546 answered 2020-07-22T20:59:16Z
0 votes
for word in ['hello'] * 2:
    print word

它不是惯用的Python,但您尝试做的也不是。

nmichaels answered 2020-07-22T20:59:36Z
-1 votes

事实证明,使用dummy *(起始词为dummy)作为变量与_具有相同的技巧。 但是,您不必理会已经定义且有时使用的变量或函数。

Alfred answered 2020-07-22T20:59:56Z
translate from https://stackoverflow.com:/questions/3685974/iterate-a-certain-number-of-times-without-storing-the-iteration-number-anywhere