我想知道为什么以下程序不打印'b'。这是非常简单的代码;我认为它必须奏效;并且不知道为什么不这样做。
def a():
if b > 10:
print 'b'
sys.exit(1)
# main
while 1:
a()
b += 1
b是全局变量。实际代码更复杂,但结构与我的相同。我想当我调用a()函数时,如果b大于10,则显示'b'。但是,它不会进入if语句。
你能帮我解决一下吗?
感谢。
答案 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)