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

2024-09-28 22:01:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想访问while循环正在修改的变量的值,在循环外连续打印。我所做的:

x=0

def funcA():
    global x
    while True:
        x=x+1
        return x

def funB():
    print x

现在,我希望x继续打印:

^{pr2}$

但事实并非如此。我不想要这个:

def funB():
   while True:
       print x

也就是说,我不希望函数funcB()内部有while循环。 非常感谢你!在


Tags: 函数truereturndefglobal事实printwhile
3条回答

我不知道这是不是你要找的,但是你可以用一个generator。在

def funcA():
    x = 0
    while True:
        yield x
        x += 1

def funcB():
    for x in funcA():
        print x #=> 1, 2, 3...

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

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

def funB(a):
    print a    

funcA(funB)

你没有一个有用的循环。在funcA中,您有一个while True:,但它只在每次循环中执行return,这意味着它只运行一次。在

因此,您可以在这两个函数之外放置一个循环:

while True:
    funcA()
    funB()

或者,您可以修复funcA,使其永远循环而不是只循环一次,然后从它内部调用funB

^{pr2}$

或者,您可以将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,或者在接下来的两个版本中将{}本身传递给funB和{},并将生成的值传递到生成器版本中

相关问题 更多 >