问题:从导入更新变量-Python
我正在Main.py中创建全局变量,并试图通过位于my States.py中的函数进行更新 my Main.py中的目标代码如下所示:问题:从导入更新变量-Python,python,nameerror,Python,Nameerror,我正在Main.py中创建全局变量,并试图通过位于my States.py中的函数进行更新 my Main.py中的目标代码如下所示: #!/usr/bin/env python # import States #Import created states.py global rad States.Update_var() leway = 2.00/rad def Update_var(): global rad rad = 180.000001/3.1415926 my States.p
#!/usr/bin/env python
#
import States #Import created states.py
global rad
States.Update_var()
leway = 2.00/rad
def Update_var():
global rad
rad = 180.000001/3.1415926
my States.py看起来是这样的:
#!/usr/bin/env python
#
import States #Import created states.py
global rad
States.Update_var()
leway = 2.00/rad
def Update_var():
global rad
rad = 180.000001/3.1415926
但当我运行代码时,rad变量不会更新为新值,我收到一个错误:
NameError:未定义全局名称“rad”
我对python还是一个新手,刚刚开始学习,所以任何帮助都会很好。谢谢您不需要使用
全局
变量在模块之间传递值,只需使用函数的返回值即可
Main.py
#!/usr/bin/env python
#
import States #Import created states.py
rad = States.Update_var()
leway = 2.00/rad
def Update_var():
return 180.000001/3.1415926
States.py
#!/usr/bin/env python
#
import States #Import created states.py
rad = States.Update_var()
leway = 2.00/rad
def Update_var():
return 180.000001/3.1415926
您不需要global
变量在模块之间传递值,只需使用函数的返回值即可
Main.py
#!/usr/bin/env python
#
import States #Import created states.py
rad = States.Update_var()
leway = 2.00/rad
def Update_var():
return 180.000001/3.1415926
States.py
#!/usr/bin/env python
#
import States #Import created states.py
rad = States.Update_var()
leway = 2.00/rad
def Update_var():
return 180.000001/3.1415926
global
关键字仅用于指示在通常为局部的上下文中,您所指的变量是全局变量。您在States.py
中正确使用了它,但是main.py
将global rad
放在模块范围内。那总是错的
在本例中,您正在导入状态
,并尝试使用其模块级变量rad
。您应该删除main.py
中的global rad
行(因为它没有被正确使用),并将其称为States.rad
# states.py
rad = 0 # unset
def update_var():
global rad
rad = 1 # set
global
关键字仅用于指示在通常为局部的上下文中,您所指的变量是全局变量。您在States.py
中正确使用了它,但是main.py
将global rad
放在模块范围内。那总是错的
在本例中,您正在导入状态
,并尝试使用其模块级变量rad
。您应该删除main.py
中的global rad
行(因为它没有被正确使用),并将其称为States.rad
# states.py
rad = 0 # unset
def update_var():
global rad
rad = 1 # set
如果需要通过外部代码更新全局变量,则必须将全局变量字典传递给该代码:
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
如果它会抱怨导入状态
模块时出现问题,请确保可以导入该模块,例如通过$export PYTHONPATH=“.”“
如果需要通过外部代码更新全局变量,则必须将全局字典传递给该代码:
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
如果它会抱怨导入状态
模块时出现问题,请确保它可以导入,例如通过$export PYTHONPATH=“”。“
可能有用可能有用所以我不会访问Update\u var()函数?抱歉,有点困惑,是否可以使用我提交的代码获得一个示例。@Ben411916如果我没有警告您使用全局变量是代码气味,那我就是失职了。像瘟疫一样避免这种情况。谢谢,我只是在尝试一些东西,所以我不会访问Update_var()函数?抱歉,有点困惑,是否可以使用我提交的代码获得一个示例。@Ben411916如果我没有警告您使用全局变量是代码气味,那我就是失职了。像瘟疫一样避免这种情况。谢谢,我只是在尝试一些东西。那么全球()是内置的吗?本质上是在Update_var函数中生成每个变量global@Ben411916内置了globals()
。如果您创建这两个文件并运行python main.py
,它将打印0.0349065842505
。快速提问,我可以从main.py中更新rad的值吗?@Ben411916是的,您可以。在顶层(外部功能)中,您可以直接这样做。在函数中,您必须声明要通过global rad
更改的全局范围内的变量。那么global()是内置的吗?本质上是在Update_var函数中生成每个变量global@Ben411916内置了globals()
。如果您创建这两个文件并运行python main.py
,它将打印0.0349065842505
。快速提问,我可以从main.py中更新rad的值吗?@Ben411916是的,您可以。在顶层(外部功能)中,您可以直接这样做。在函数中,您必须声明要通过global rad
更改的全局范围内的变量。