【问题标题】:return constantly changing variable python返回不断变化的变量python
【发布时间】:2015-12-25 19:39:22
【问题描述】:

我试图在 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 的当前值,如果可以的话怎么办?

【问题讨论】:

  • 您能否提供有关返回不断变化的变量的根本愿望的任何细节?跟踪的变量是什么,为什么需要不断地而不是根据需要进行跟踪?
  • 请描述你对这个程序的意图,因为我怀疑你需要别的东西而不是“不断返回值”。
  • 该程序的目标是让我访问它 elseware 并调用 count(),以找到 x 的当前值。例如,如果我想在用户 ID 的末尾附加一个数字。
  • 具有自动递增字段的数据库表是不可能的吗?我想我应该澄清我的问题,用例是什么?您想为用户 ID 提供一些唯一性吗?为什么不使用指南?
  • user-id 只是一个例子......

标签: python recursion counter


【解决方案1】:

看起来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)

【讨论】:

  • 谢谢,你回答了我的两个问题(我没有看到编辑)
  • @HaiVu 感谢您的提示。已删除。
【解决方案2】:

你想要的是一个 generatoryield 每个值:

def count(l):
    x = 0
    while True:
        yield x
        if x == l:
            x = -1
        x += 1


for i in count(5):
    print(i)

【讨论】:

  • for i in count(5) 将导致无限循环 :-) 解决方案是正确的,顺便说一句。
  • @HaiVu,是的,这是医生要求的
【解决方案3】:

你想要的是制作一个生成器函数

它看起来像一个普通函数,只是它包含用于生成一系列可用于 for 循环的值的 yield 表达式,或者可以使用 next() 函数一次检索一个值。

通常指的是生成器函数,但在某些情况下可能指的是生成器迭代器。在预期含义不明确的情况下,使用完整的术语可以避免歧义。

如果您希望以某种方式计算一系列值,但不需要一次全部都需要,您可以制作一个生成器,因为您只在特定时间需要一个和/或有太多或甚至无穷无尽。

生成器会记住如果是在产生一个值的那一刻,并将从该点恢复其计算,然后需要一个新值。

@Mike Muller 已经为你的问题提供了完美的解决方案,那么另一个例子怎么样,比如斐波那契数,它们有无数个,但是你可以制作一个生成器,像这样为你提供所有这些

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2018-02-21
    相关资源
    最近更新 更多