帮助定义全局名称

时间:2010-08-29 17:01:39

标签: python function-calls

我的代码:

def A():
    a = 'A'

    print a

    return

def B():

    print a + ' in B'

    return

当B()输入到interpeter中时,我得到了

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()输入解释器时,我希望最终结果为'A in B'

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

6 个答案:

答案 0 :(得分:2)

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

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

A()
B()

打印:

A
A in B

顺便说一句:你不需要在一个函数的末尾有一个简单的“返回”。

答案 1 :(得分:2)

我对Python很陌生,你可能想要了解下面的内容,但你是否考虑过将变量a和函数A()和B()作为类的成员? / p>

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()

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

答案 2 :(得分:0)

a = 'A'    
def B():    
    print a + ' in B'

答案 3 :(得分:0)

您可以使用global关键字

来执行此操作
def A():
    global a
    a = 'A'

def B():
    global a
    # ...

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

答案 4 :(得分:0)

this 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'

答案 5 :(得分:-1)

只需输入,不需要创建功能或类:

global a

a = 'A'

print a 

print a + ' in B'