我有一个循环:
for x in itertools.repeat(1)
根据cmd行参数,我需要将此值设置为无穷大或x
次。
所以
for x in itertools.repeat(1)
或这个
for x in itertools.repeat(1, x)
我该怎么做?
答案 0 :(得分:0)
itertools.repeat
返回一个可迭代对象,因此您可以执行以下操作:
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]
将是您的输入。
答案 1 :(得分:0)
它是Python,因此您可以执行以下操作:如果要测试的对象是myCondition
(例如a == 2
),则:
myIterator = itertools.repeat(1) if myCondition else itertools.repeat(1, x)
for x in myIterator:
do-something
答案 2 :(得分:0)
您可以使用HtmlEncoder
代替第二个参数来限制数量
退回的商品。
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):
...
的{{1}}参数为stop
,则没有上限
切片中项目的数量。
我很惊讶islice
本身确实
不接受None
以显式触发默认行为。我提交了bug report;我们将查看维护者是否也认为它是错误。
答案 3 :(得分:0)
这里有一个快速的单线解决方案,它非常紧凑,我想重复无数次或仅重复一次,您可以使用此方法:
itertools.repeat(my_object, *([] if my_condition else [1]))
在[]
情况下不会进行参数扩展,因此您将获得None
的效果,您可以根据文档以及对函数目的的合理理解(在我看来)
否则,[1]
将扩展为times=1
,您可以将1替换为所需的任何值。
times=None
会更干净一些,但实际上,维护者不想要它(https://bugs.python.org/issue34169)。