首页 > 解决方案 > 变量未传递到较低级别?

问题描述

我知道python中的变量总是(?)在子函数中可用。

这就是为什么它有效:

def abc():
    print(a)

def main():
    abc()
    pass

if __name__=='__main__':
    a = 'a'
    main()

a但是,如果将 的定义移至,为什么它不起作用main()

def abc():
    print(a)

def main():
    a = 'a'
    abc()
    pass

if __name__=='__main__':
    main()

它在使用之前仍然是定义的,并且应该在 中可用abc(),对吗?

标签: pythonpython-3.x

解决方案


不,函数中定义的变量默认作用于该函数。要使其可用,abc()您需要使其global

def main():
    global a
    a = 'a'
    abc()

至于“阴影”警告,当您在内部范围内重新定义名称时会得到它。例如,此代码创建一个全局变量a

if __name__ == '__main__':
    a = 'a'
    main()

现在,如果您在a = 'b'内部进行,则通过创建具有相同名称的局部变量main()来有效地从外部范围“隐藏” 。a


推荐阅读