从导入问题更新变量 - Python

时间:2016-01-18 20:24:14

标签: python nameerror

我在Main.py中创建全局变量并尝试通过位于States.py中的函数进行更新

我的Main.py中的目标代码如下所示:

#!/usr/bin/env python
#
import States #Import created states.py

global rad
States.Update_var()
leway = 2.00/rad

我的States.py看起来像这样:

def Update_var():
global rad
rad = 180.000001/3.1415926

但是当我运行代码时,rad变量没有更新到新值,我收到错误:

NameError:全局名称' rad'未定义

我非常喜欢蟒蛇,只是找到我的脚,所以任何帮助都会很棒。感谢

3 个答案:

答案 0 :(得分:1)

您不需要global变量来传递模块之间的值,只需使用函数return值即可。

<强> Main.py

#!/usr/bin/env python
#
import States #Import created states.py

rad = States.Update_var()
leway = 2.00/rad

<强> States.py

def Update_var():
    return 180.000001/3.1415926

答案 1 :(得分:1)

global关键字仅用于表示在通常为本地的上下文中,您所指的变量是全局。您在States.py中正确使用了它,但main.pyglobal rad放在模块范围内。这总是错的。

在这种情况下,您要导入States并尝试使用其模块级变量rad。您应该移除global rad中的main.py行(因为它没有被正确使用)并将其称为States.rad

# states.py

rad = 0  # unset

def update_var():
    global rad
    rad = 1  # set

# main.py

import states

states.rad  # 0
states.update_var()
states.rad  # 1

答案 2 :(得分:1)

如果需要通过外部代码更新全局变量,则必须将全局变量字典传递给该代码:

main.py:

import States

States.Update_var(globals())


leway = 2.00/rad
print leway

States.py:

def Update_var(dct):
    dct["rad"] = 180.000001 / 3.1415926

将这两个文件放在目录中,运行:

$ python main.py
0.0349065842505

如果导致States模块导致出现问题,请确保导入该模块,例如按$ export PYTHONPATH="."