返回不断变化的变量python

时间:2015-12-25 19:39:22

标签: python recursion counter

我试图在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的当前值,如果是这样的话?

3 个答案:

答案 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