为什么我不能使用python在b函数中打印aa

时间:2011-03-30 09:22:56

标签: python scope

这是我的代码:

def a():
    print aa

def b():
    aa = 'aaaa'
    a()

b()

显示错误:

Traceback (most recent call last):
  File "g.py", line 12, in <module>
    b()
  File "g.py", line 10, in b
    a()
  File "g.py", line 6, in a
    print aa
NameError: global name 'aa' is not defined

必须在b函数

中定义aa

我能做什么,

感谢

5 个答案:

答案 0 :(得分:5)

aa仅在b()的范围内定义。您可以将变量定义拉出函数或将其用作参数。

这应该有效:

def a():
    print aa

def b():
    global aa
    aa = 'aaaa'
    a()

b()

当然,这也应该有效:

def a(aa):
    print aa

def b():
    aa = 'aaaa'
    a(aa)

b()

答案 1 :(得分:2)

aa = 'aaaa'仅作为函数b()本地。要在()内打印,你需要将它返回到像这样的

def a(arg):
    print arg

def b():
    aa = 'test'
    return a(aa)

或者(这是最糟糕的做法。你不应该这样做,我只是把它作为解释)

def b():
    global aa
    aa = 'test'
    a()

答案 2 :(得分:1)

def a():
    global aa
    print aa

def b():
    global aa
    aa = 'aaaa'
    a()

b()

一种解决方案,但最好将aa作为参数传递给a()

答案 3 :(得分:0)

我建议为你的函数和变量使用更好的名字 - a(),b()是没有意义的。 要使代码工作,您必须创建一个全局变量(不推荐)或将其传递给函数:

def a(aa):
    print aa  

def b():
    aa = 'aaaa'
    a(aa)

b()

答案 4 :(得分:0)

aa = None

def a():
    print aa

def b():
    global aa
    aa = 'aaaa'
    a()

b()