我试图在Python 3中返回一个不断变化的变量,变量在while循环中,计数到指定的数字,将其值更改为零,然后重新开始。 (例如,1,2,3,4,5, 0 ,1,2,3,4,5, 0 ...) 这是我的代码:
global x
run = True
def count(l):
x = 0
global run
while run:
x += 1
if x == l+1:
x = 0
print(x)
当我运行count(5)
它打印所需的结果时,但是1:我正试图找到一种方法在后台不断运行该循环,而2:变量需要返回,而不是打印
GetCount()
并让返回所需的结果。
我已经尝试将其添加到函数的末尾:
try:
return x
finally:
count(l)
但是随着比较期间超出最大递归深度
,它崩溃了所以我的问题是,1:有没有办法让x在没有达到最大递归深度的情况下连续返回?,2:如果有的话,还有办法让count()
在背景,所以我可以得到x的当前值,如果是这样的话?
答案 0 :(得分:5)
看起来itertools.cycle
可以提供帮助:
import itertools as it
c = it.cycle(range(6))
for x in range(10):
print(next(c))
打印:
0
1
2
3
4
5
0
1
2
3
只需使用next(c)
即可获得下一个号码。
print(next(c))
现在打印:
4
因为我们之前在3
停了下来。您可以使用以下方式设置ID值:
my_id = next(c)
答案 1 :(得分:1)
你想要的是生成器和产生每个值:
def count(l):
x = 0
while True:
yield x
if x == l:
x = -1
x += 1
for i in count(5):
print(i)
答案 2 :(得分:0)
你想要的是制造发电机功能
它看起来像一个普通函数,除了它包含yield表达式,用于生成一个在for循环中可用的值,或者可以使用next()函数一次检索一个值。
通常是指生成器函数,但在某些上下文中可能引用生成器迭代器。如果预期含义不明确,使用完整的术语可以避免含糊不清。
如果您希望以某种方式计算一系列值,而不是一次性需要所有值,那么您可以生成一个生成器,因为您在特定时间只需要一个和/或太多或者甚至是无限的。
生成器会记住,如果当时正在产生一个值,并且从那时起将恢复计算,需要一个新的值。
@Mike Muller已经为你的问题提供了完美的解决方案,那么另外一个例子,比如Fibonacci数字,它们有无数,但是你可以制作一个发电机给你这样的所有这些def Fib():
Fn = 0
Fn1 = 1
while True:
yield Fn
Fn,Fn1 = Fn1, Fn+Fn1
当你要求时,这将为你提供每一个斐波纳契数字
>>> fibo=Fib()
>>> for i in range(10):
print("the",i,"-th fibonacci number is:",next(fibo))
the 0 -th fibonacci number is: 0
the 1 -th fibonacci number is: 1
the 2 -th fibonacci number is: 1
the 3 -th fibonacci number is: 2
the 4 -th fibonacci number is: 3
the 5 -th fibonacci number is: 5
the 6 -th fibonacci number is: 8
the 7 -th fibonacci number is: 13
the 8 -th fibonacci number is: 21
the 9 -th fibonacci number is: 34
>>> next(fibo) #10-th
55