如何在另一个函数中同时访问while循环中使用的全局变量?

时间:2013-10-09 21:52:18

标签: python python-2.7 while-loop global-variables

我想访问由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循环。 非常感谢你!

3 个答案:

答案 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)

或者您可以每次循环而不是funcAyield 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...