python:访问不同模块中函数中的变量
我已经把我要做的事情提炼成最简单的形式。我有一个运行良好的单模块(prog1.py)。prog1.py中的函数访问变量(yy)OK时没有错误python:访问不同模块中函数中的变量,python,variables,global,local,Python,Variables,Global,Local,我已经把我要做的事情提炼成最简单的形式。我有一个运行良好的单模块(prog1.py)。prog1.py中的函数访问变量(yy)OK时没有错误 #prog1.py def func(): print (yy) return() def main(yy): print(yy) func() return() #----------------------------------------------- if __name__ == '__main__'
#prog1.py
def func():
print (yy)
return()
def main(yy):
print(yy)
func()
return()
#-----------------------------------------------
if __name__ == '__main__':
yy = 200
main(yy)
当我将该模块导入另一个模块(prog2.py)时,同一个函数无法访问变量(yy)
我得到:
func第3行中未定义名称“yy”
“正确”(python)的方法是什么 问题在
func
中:
def func():
print (yy)
return()
行print(yy)
尝试访问yy
,但是如果
name\uuuuuu=='\uuuuuuu main\uuuuuuu':对于该模块将不为真(\uuuu name\uuuuuu
将是prog1
而不是\uuuu main\uuuuuuuuuuuu
),因此它将不会进入如果
:
if __name__ == '__main__':
yy = 200
main(yy)
因此,将不定义yy
阅读更多关于如果uuuu name_uuuuu=='\uuuuu main\uuuuuuu':
的信息
根据您在评论中提到的内容:
#prog1.py
yy = 'prog1 yy'
def func():
print(yy)
def main(yy):
print(yy)
func()
if __name__ == '__main__':
yy = 200
main(yy)
运行:
输出:
200
prog1 yy
我理解,但是
yy
是在main(yy)
例程中定义的,因为打印工作正常。只有当func
尝试使用yy
时,问题才会出现。我们已将yy
传递给main
函数,因此它可以访问它(yy
的范围限于main
,func
不知道它)。您必须将其作为参数显式传递给func
,以便它可以访问它(类似于您对main
)所做的操作)。好的,谢谢Dipen,但我尝试这样做时没有将yy
作为参数传递。global
是一条路吗?虽然我收集了一些人说不要使用它。是的,使用全局变量是可能的,但只要有可能,我们应该尽量避免使用全局变量。我确实尝试过使用全局变量,但仍然出现了错误。你能指出在我描述的情况下如何使用global吗?
# prog2.py
import prog1
yy = 200
prog1.main(yy)
python prog2.py
200
prog1 yy