我想访问由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循环。 非常感谢你!
答案 0 :(得分:1)
你没有任何有用的循环 。在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
,并使用它来驱动funB
:
def funcA():
global x
while True:
x=x+1
yield x
for _ in funcA():
funB()
或者......你可以做各种各样的事情。问题是你实际上想要做什么。如果你能解释一下,有人可以帮你写。
同时,在大多数情况下,您实际上并不需要全局变量。鉴于funcA
已尝试return x
,您只需将返回的值传递到外循环版本中的funB
,或将x
本身传递给{{1}接下来的两个版本中的funB
,并在生成器版本中传递yielding值,...
答案 1 :(得分:1)
回调可行并避免需要全局x
:
def funcA(cb):
x = 0
while True:
x=x+1
cb(x)
def funB(a):
print a
funcA(funB)
答案 2 :(得分:1)
我不知道这是否是您要找的,但您可以使用generator。
def funcA():
x = 0
while True:
yield x
x += 1
def funcB():
for x in funcA():
print x #=> 1, 2, 3...