我有一个从模块调用的函数。在函数中,我试图访问的两个变量是全局的。当我在 IDLE 中单独运行模块时,我仍然可以在函数结束后访问变量,正如预期的那样。当我在导入模块的代码中调用函数时,我无法访问变量。
#module to be imported
def globaltest():
global name
global age
name = str(raw_input("What is your name? "))
age = int(raw_input("What is your age? "))
我自己运行时的输出。
>>> globaltest()
What is your name? tom
What is your age? 16
>>> name
'tom'
>>> age
16
以及导入它的代码。
import name_age
name_age.globaltest()
但是当我运行时尝试访问我导入它的代码中的变量。
What is your name? tom
What is your age? 16
>>> name
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
name
NameError: name 'name' is not defined
>>>
如何在导入模块的代码中使变量成为全局变量或在函数中访问“name”或“age”变量。
最佳答案
简单的回答是“不要”。 Python 的“全局变量”只是模块级全局变量,甚至应该尽可能避免使用模块级全局变量(即可变的模块级全局变量),而且使用它的理由非常少。
正确的解决方案是学会正确使用函数参数和返回值。在您的情况下,第一种方法是
#module.py
def noglobaltest():
name = str(raw_input("What is your name? "))
age = int(raw_input("What is your age? "))
return name, age
然后:
from module import noglobaltest
name, age = noglobaltest()
print "name :", name, "age :", age
关于python - 从导入模块中的函数访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15924700/