Help Defining Global Names
My Code:
def A():
a = 'A'
print a
return
def B():
print a + ' in B'
return
When B() is entered into the interpeter I get
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
How should I go about defining a? I want the end result to be 'A in B', when B() is entered into the i开发者_运维技巧nterpreter
edit: I'd like to keep the definition of a within A() if possible.
def A():
global a
a = 'A'
print a
def B():
global a
print a + ' in B'
A()
B()
this prints:
A
A in B
BTW: You never need a plain "return" at the end of a function.
i'm pretty new to Python and you might want to take thes following with a grain of salt, but did you consider to have your variable a and the functions A() and B() as members of a class?
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()
When i save the code above in a file and run it, it seems to work as expected.
a = 'A'
def B():
print a + ' in B'
You can do this by using the global
keyword:
def A():
global a
a = 'A'
def B():
global a
# ...
However, using global variables is generally a bad idea - are you sure there's not a better way to do what you want to do?
check out my answer from this SO question. Basically:
Create a new module containing only global data (in your case let's say myGlobals.py
):
# create an instance of some data you want to share across modules
a=0
and then each file you want to have access to this data can do so in this fashion:
import myGlobals
myGlobals.a = 'something'
so in your case:
import myGlobals
def A():
myGlobals.a = 'A'
print myGlobals.a
def B():
print myGlobals.a + ' in B'
Just type like this, no need to create fuction or class :
global a
a = 'A'
print a
print a + ' in B'
精彩评论