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



我想访问一个变量的值,该变量正在被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自身传递给funBfunction,并在生成器版本中传递生成的值,...

调将起作用,并避免了全局x的需要:

def funcA(cb):
    x = 0
    while True:
        x=x+1
        cb(x)
def funB(a):
    print a    
funcA(funB)

相关内容

  • 没有找到相关文章

最新更新