我想访问一个变量的值,该变量正在被while循环修改,以便在循环外连续打印。我做了什么:
x=0
def funcA():
global x
while True:
x=x+1
return x
def funB():
print x
现在,我希望 x 保持连续打印:
1
2
3 and so on!
但事实并非如此。我不要这个:
def funB():
while True:
print x
也就是说,我不想要函数 funcB(( 中的任何 while 循环。谢谢!
这是否是你要找的,但你可以使用生成器。
def funcA():
x = 0
while True:
yield x
x += 1
def funcB():
for x in funcA():
print x #=> 1, 2, 3...
你在任何地方都没有一个有用的循环。在funcA
中,你有一个while True:
,但它每次通过循环都做一个return
,这意味着它只运行一次。
因此,您可以在两个函数之外放置一个循环:
while True:
funcA()
funB()
或者,您可以修复funcA
使其永远循环而不是一次,然后从内部调用funB
:
def funcA():
global x
while True:
x=x+1
funB()
或者你可以funB
传递给funcA
,让它调用它传递的任何内容:
def funcA(*functions):
global x
while True:
x=x+1
for function in functions:
functions()
funcA(funB)
或者你可以每次通过循环进行funcA
yield
而不是return
ing,并用它来驱动funB
:
def funcA():
global x
while True:
x=x+1
yield x
for _ in funcA():
funB()
或。。。你可以做各种各样的事情。问题是你真正想做什么。如果你能解释一下,有人可以帮你写。
同时,在大多数情况下,您实际上并不需要全局变量。鉴于 funcA
已经在尝试return x
,您可以在外循环版本中将返回的值传递给funB
,或者在接下来的两个版本中将x
自身传递给funB
和 function
,并在生成器版本中传递生成的值,...
调将起作用,并避免了全局x
的需要:
def funcA(cb):
x = 0
while True:
x=x+1
cb(x)
def funB(a):
print a
funcA(funB)