1

我的代码:

def A():
    a = 'A'

    print a

    return

def B():

    print a + ' in B'

    return

当 B() 进入解释器时,我得到

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "<module1>", line 9, in B
NameError: global name 'a' is not defined

我应该如何定义一个?当 B() 输入解释器时,我希望最终结果是“B 中的 A”

编辑:如果可能的话,我想在 A() 中保留 a 的定义。

4

6 回答 6

3
def A():
    global a
    a = 'A'
    print a

def B():
    global a
    print a + ' in B'

A()
B()

这打印:

A
A in B

顺便说一句:您永远不需要在函数末尾简单地“返回”。

于 2010-08-29T17:05:02.610 回答
2

我对 Python 还是很陌生,您可能希望对以下内容持保留态度,但是您是否考虑过将变量 a 以及函数 A() 和 B() 作为类的成员?

class myClass(object):

    def __init__(self):
        self.a = ''

    def A(self):
        self.a = 'A'
        print self.a

    def B(self):
        print self.a + ' in B'


def main():
    stuff = myClass()
    stuff.A()
    stuff.B()

if __name__ == '__main__':
    main()

当我将上面的代码保存在一个文件中并运行它时,它似乎按预期工作。

于 2010-08-29T17:54:53.273 回答
0
a = 'A'    
def B():    
    print a + ' in B'
于 2010-08-29T17:05:05.327 回答
0

您可以使用以下global关键字来执行此操作:

def A():
    global a
    a = 'A'

def B():
    global a
    # ...

但是,使用全局变量通常不是一个好主意——你确定没有更好的方法来做你想做的事吗?

于 2010-08-29T17:05:22.907 回答
0

从这个 SO question中查看我的答案。基本上:

创建一个仅包含全局数据的新模块(在您的情况下,假设myGlobals.py):

# create an instance of some data you want to share across modules
a=0

然后您希望访问此数据的每个文件都可以通过以下方式进行:

import myGlobals

myGlobals.a = 'something'

所以在你的情况下:

import myGlobals

def A():
    myGlobals.a = 'A'
    print myGlobals.a

def B():
    print myGlobals.a + ' in B'
于 2010-08-29T17:07:46.037 回答
-1

只需像这样输入,无需创建函数或类:

global a

a = 'A'

print a 

print a + ' in B'
于 2015-05-22T03:04:46.403 回答