python - 变量未传递到较低级别?
问题描述
我知道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()
,对吗?
解决方案
不,函数中定义的变量默认作用于该函数。要使其可用,abc()
您需要使其global
:
def main():
global a
a = 'a'
abc()
至于“阴影”警告,当您在内部范围内重新定义名称时会得到它。例如,此代码创建一个全局变量a
:
if __name__ == '__main__':
a = 'a'
main()
现在,如果您在a = 'b'
内部进行,则通过创建具有相同名称的局部变量main()
来有效地从外部范围“隐藏” 。a
推荐阅读
- github - GitHub 删除的文件正在抛弃语言统计信息
- c# - 从 JSON 中删除附加文本
- react-native - 在 createStackNavigator() 之前执行代码
- java - 检查 Firebase 实时数据库中是否存在字段
- amazon-web-services - 调用 UpdateService 操作时的 AWS ECS InvalidParameterExcpetion
- kotlin - 为什么此代码没有将所有大写字母替换为小写字母并将所有小写字母替换为大写字母?
- typescript - 为什么类型检查器允许此代码?
- sendgrid - 子用户无法登录 Sendgrid
- laravel - 我正在尝试使用控制器路由列表执行 clouser 功能
- java - Hibernate 2nd Level Cache:在 oneToMany 关系中创建实体时更新缓存集合