python:访问不同模块中函数中的变量

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)。prog1.py中的函数访问变量(yy)OK时没有错误

#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