Python repeat(object[,times])如何选择在运行时设置times选项?

Python repeat(object[,times])如何选择在运行时设置times选项?,python,Python,我有一个循环: for x in itertools.repeat(1) 根据cmd行参数,我需要无限次或x次数 那么这个 for x in itertools.repeat(1) 还是这个 for x in itertools.repeat(1, x) 如何执行此操作?itertools.repeat返回一个iterable,因此您可以执行以下操作: import sys import itertools if len(sys.argv) > 1: repeater =

我有一个循环:

for x in itertools.repeat(1)
根据cmd行参数,我需要无限次或
x
次数

那么这个

for x in itertools.repeat(1)
还是这个

for x in itertools.repeat(1, x)

如何执行此操作?

itertools.repeat
返回一个iterable,因此您可以执行以下操作:

import sys
import itertools

if len(sys.argv) > 1:
    repeater = itertools.repeat(1, int(sys.argv[1]))
else:
    repeater = itertools.repeat(1)

for x in repeater:
    print x

sys.argv
是cli输入
argv[0]
将始终是脚本名称,因此我假设
argv[1]
将是您的输入。

它是Python,所以您可以这样做:如果
myCondition
是您要测试的东西(例如
a==2
),那么:


您可以使用
islice
而不是第二个参数来限制数字 归还物品的数量

import argparse
import itertools

p = argparse.ArgumentParser()
p.add_argument("--count", type=int, default=None)
args = p.parse_args()

ones = itertools.repeat(1)
for x in itertools.islice(ones, args.count):
    ...
如果
islice
stop
参数为
None
,则没有上限 关于切片中的项目数


我很惊讶
repeat
本身会这样做
不接受
None
以显式触发默认行为。我提交了一份报告;我们将看看维护者是否也认为它是一个bug。

这是一个很快的一个线性解决方案,我使用的是一个很好的紧凑型,我想重复无数次或者只重复一次,你可以用这个:

itertools.repeat(my_object, *([] if my_condition else [1]))
参数扩展不会发生在
[]
的情况下,因此您会得到
的效果,这是基于文档和(在我看来)对函数的合理解读

否则,
[1]
将扩展到
倍=1
,您可以用所需的任何值替换1


times=None
本来会更干净,但无论如何,维护人员都不想要它()。

一个
if
语句?我很惊讶
itertools.repeat(1,None)
并不等同于
itertools.repeat(1)
;我倾向于考虑这个bug。嗨,是的,我尝试过ItdioToals.重复(1,没有)但是没有工作…谢谢,我同意,我希望这个问题在python bug tracker()上得到更多的关注,今天它浪费了我20分钟的时间来挖掘源代码。哈哈,比我快39秒。可能需要向询问者解释什么是
sys.argv
。这对我来说是有效的。我希望像itertools一样。重复(1,无),但无论如何。。。是的,谢谢。我也知道sys.argv是什么:)
itertools.repeat(my_object, *([] if my_condition else [1]))