我想知道为什么下面的程序不打印'b'。这是非常简单的代码;我认为它必须有效;并且不知道为什么它没有。
def a():
if b > 10:
print 'b'
sys.exit(1)
# main
while 1:
a()
b += 1
b 是全局变量。实际代码更复杂,但结构和我的一样。我想当我调用 a() 函数并且如果 b 大于 10 时,它会显示“b”。但是,它不会进入 if 语句。
你能帮我看看如何解决吗?
谢谢。
我想知道为什么下面的程序不打印'b'。这是非常简单的代码;我认为它必须有效;并且不知道为什么它没有。
def a():
if b > 10:
print 'b'
sys.exit(1)
# main
while 1:
a()
b += 1
b 是全局变量。实际代码更复杂,但结构和我的一样。我想当我调用 a() 函数并且如果 b 大于 10 时,它会显示“b”。但是,它不会进入 if 语句。
你能帮我看看如何解决吗?
谢谢。
全局变量是可怕的,学会不使用它们,试试这样的东西
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
另一个答案建议不要使用全局变量,我同意。如果您仍想使用全局变量,则应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
只是我的 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
您需要在 "+=" 之前定义 b 。
def a():
if b > 10:
print 'b'
sys.exit(1)
# main
b = 0 # HERE
while 1:
a()
b += 1
顺便说一句,正如许多人告诉你的那样:避免使用全局变量。
全局变量不是通常的方法。您可能更喜欢使用嵌套函数:
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)