将值重新分配给python中函数内的变量

时间:2018-05-22 07:21:58

标签: python loops

我想运行一个无限循环,每隔100个循环我想要打印。如果我这样做:它完美地运作,

delay=0

while 1:
delay=delay+1
print(delay)
if delay>100:
    delay=0
    print('100th time')

但是,如果我将if语句放在一个函数中,则会出错:

delay=0
def foo():
    if delay>100:
        delay=0
        print('100th time')
while 1:
    delay=delay+1
    print(delay)
    foo()

错误是:UnboundLocalError:赋值前引用的局部变量'delay'。

无论如何我可以在功能中进行重新分配吗?将整个事情放在我的while循环中对我来说会有问题。

3 个答案:

答案 0 :(得分:2)

如果您不希望将global作为delay的参数传递,则可以使用foo。但最好这样做。另请阅读:Why are global variables evil?

delay=0
def foo():
    global delay
    if delay>100:
        delay=0
        print('100th time')
while 1:
    delay=delay+1
    print(delay)
    foo()

答案 1 :(得分:0)

您可以在函数内使用global声明,如下所示:

delay=0
def foo():
    global delay
    if delay>100:
        delay=0
        print('100th time')
while 1:
    delay=delay+1
    print(delay)
    foo()

在这种情况下,您还可以通过传递函数global并重新分配foo() delay之类的值来避免delay = (delay + 1) % 100

delay=1
def foo(delay):
    if delay == 0:
        print('100th time')
while True:
    delay = delay + 1
    print(delay)
    foo(delay)
    delay = delay % 100

答案 2 :(得分:0)

将延迟传递给函数并使用modulu(%):

delay=0
def foo(delay):
    if delay % 100 == 0:
        print('100th time')

while True:
    delay=delay+1
    print(delay)
    foo(delay)

当存在其他有效解决方案时,请始终避免使用global。它们显着增加了代码的复杂性。