1

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

4

3 回答 3

2

I don't know if this is what you are looking for, but you could use a generator.

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

def funcB():
    for x in funcA():
        print x #=> 1, 2, 3...
于 2013-10-09T22:20:07.863 回答
1

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

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

while True:
    funcA()
    funB()

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

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

或者你可以传递funBfuncA它并让它调用它传递的任何东西:

def funcA(*functions):
    global x
    while True:
        x=x+1
        for function in functions:
            functions()

funcA(funB)

或者您可以funcA yield每次都通过循环而不是returning,并使用它来驱动funB

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

for _ in funcA():
    funB()

或者……你可以做各种各样的事情。问题是你真正想要做什么。如果你能解释清楚,有人可以帮你写。


同时,在大多数情况下,您实际上并不需要全局变量。鉴于funcA已经在尝试return x,您可以funB在外循环版本中将返回值传递给 to,或者在接下来的两个版本中将x自身传递给funB和 to function,并在生成器版本中传递产生的值,...</p>

于 2013-10-09T21:56:55.030 回答
1

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

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

def funB(a):
    print a    

funcA(funB)
于 2013-10-09T21:57:04.267 回答