python - 从导入模块中的函数访问全局变量

标签 python function python-2.7 module global-variables

我有一个从模块调用的函数。在函数中,我试图访问的两个变量是全局的。当我在 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/

相关文章:

python - 对命令运行 popen 时出现异常

python - 当 Wagtail 作为应用程序集成到 Django 项目中时,如何设置项目根 url

sql-server - tsql 用户定义函数

python-2.7 - Ansible 无法在 sbin 文件夹上运行 shell 模块

Python - 追加字符丢失

python - 将 A 列列表中的最后一个值添加到 b 列列表中

c# - 如何使用 C# 舍入到最接近的 .5

Android源码函数奇特的名字

Django反向查询集包含列表中的所有值

python 2.7 for循环生成列表