2010-08-29 55 views
1

我的代码:帮助定义全局名称

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的定义。

回答

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

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

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

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

A() 
B() 

此打印:

A 
A in B 

BTW:你永远需要在函数结束一个普通的 “回报”。

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

我想保持内A()如果可能的定义。 – rectangletangle 2010-08-29 17:08:22

0

您可以通过使用global关键字做到这一点:

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

def B(): 
    global a 
    # ... 

然而,使用全局变量一般是坏主意 - 你确定有没有一个更好的方式做你想要什么去做?

+0

由于某些原因,这不起作用,我得到相同的名称错误。 – rectangletangle 2010-08-29 17:22:48

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

这样只需要输入,无需创建机能的研究或类:

global a 

a = 'A' 

print a 

print a + ' in B'