Python函数参数为None时如何调用同名全局变量并解决语法错误
错误原因
Python 语法明确规定:同一个变量名不能在同一函数作用域内同时作为参数和global全局变量声明。即使global声明写在条件分支里,解释器在解析函数定义阶段就会检测到命名冲突,直接抛出SyntaxError: name 'ggg' is parameter and global语法错误,和分支是否实际运行无关。
实现方案
不需要在函数内添加global声明,直接调用Python内置的globals()函数获取全局命名空间中的同名变量即可,该方法不会和当前函数的参数名产生冲突。
正确实现代码如下:
# 全局变量定义 ggg = 1 def AAA(ggg=None): # 参数为None时读取全局变量值,否则使用传入的参数值 if ggg is None: ggg = globals()['ggg'] print(ggg) AAA(None) # 输出1,符合预期 AAA(2) # 输出2,符合预期
补充说明
判断参数是否为None时建议使用is None而非not ggg,后者会把0、空字符串、空列表等布尔值为False的合法传入值误判为需要读取全局变量的场景,不符合业务预期。
内容的提问来源于stack exchange,提问作者Luk Aron
相关产品推荐
相关产品推荐

