为什么不打印打印值?

时间:2012-05-28 17:31:30

标签: python function if-statement

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

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

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

b是全局变量。实际代码更复杂,但结构与我的相同。我想当我调用a()函数时,如果b大于10,则显示'b'。但是,它不会进入if语句。

你能帮我解决一下吗?

感谢。

5 个答案:

答案 0 :(得分:3)

Globals很可怕学习不使用它们,尝试这样的事情

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

答案 1 :(得分:1)

另一个答案表明不使用全局变量,我同意。如果你仍然想要使用全局变量,你应该首先在循环之外定义b。(如果你这样做,那么请发布完整的代码,因为除此之外,它应该工作(并且它确实))。 / p>

现在,函数定义中的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

答案 2 :(得分: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

答案 3 :(得分:0)

你需要在“+ =”之前定义b。

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

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

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

答案 4 :(得分:0)

全球变数不是常用的方式。您可能更喜欢使用nested functions

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)