我想运行一个无限循环,每隔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循环中对我来说会有问题。
答案 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
。它们显着增加了代码的复杂性。