0

我想知道为什么下面的程序不打印'b'。这是非常简单的代码;我认为它必须有效;并且不知道为什么它没有。

def a():
    if b > 10:
        print 'b'
        sys.exit(1)

# main
while 1:
    a()
    b += 1

b 是全局变量。实际代码更复杂,但结构和我的一样。我想当我调用 a() 函数并且如果 b 大于 10 时,它会显示“b”。但是,它不会进入 if 语句。

你能帮我看看如何解决吗?

谢谢。

4

5 回答 5

3

全局变量是可怕的,学会不使用它们,试试这样的东西

import sys
def a(value):
    if value > 10:
        print value
        print "Greater than 10!"
        sys.exit(0)
b = 0
while True:
    a(b)
    b += 1
于 2012-05-28T17:34:39.513 回答
1

另一个答案建议不要使用全局变量,我同意。如果您仍想使用全局变量,则应b首先在循环之外定义。(如果您这样做,请发布完整的代码,因为除此之外,它应该可以工作(并且确实如此))。

现在,global b在函数中定义是没有必要的,因为当你在分配之前尝试访问它时,python 猜测它是一个全局变量。但由于它没有被定义,它引发了一个NameError

NameError: global name 'b' is not defined

如果你没有看到,那么还有别的东西,你没有显示有问题的实际代码。

这最终给了你类似的东西:

import sys
def a():
    global b
    if b > 10:
        print 'b'
        sys.exit(1)

b = 0
# main
while 1:
    a()
    b += 1
于 2012-05-28T17:43:47.270 回答
0

只是我的 2 美分:忘记全局变量。

无论如何,这应该工作

def a():
    global b
    if b > 10:
        print 'b'
        sys.exit(1)

编辑FUUUUUUUUUUUUUUU

尽管我完全同意 Jackob 关于如何使用函数参数和避免全局变量的观点,但为了记录,这里是全局的解决方案:

def a():
    global b
    if b > 10:
        print 'b'
        sys.exit(1)

# main
b = 0
while 1:
    a()
    b += 1
于 2012-05-28T17:34:13.057 回答
0

您需要在 "+=" 之前定义 b 。

def a():
    if b > 10:
        print 'b'
        sys.exit(1)

# main
b = 0 # HERE
while 1:
    a()
    b += 1

顺便说一句,正如许多人告诉你的那样:避免使用全局变量。

于 2012-05-28T17:45:50.633 回答
0

全局变量不是通常的方法。您可能更喜欢使用嵌套函数

import sys

def outer(value=0):
    count = [value]
    print "started at:", count[0]
    def inner(x=1):
        print "current val:", count[0]
        count[0] += x
        if count[0] > 10:
            print "stopped at:", count[0]
            sys.exit(0)
    return inner

f = outer(5)
while True:
    f(1)
于 2012-05-28T18:32:29.233 回答