Python调用函数时如何修改参数对应的全局变量值
报错原因
触发name 'Variable' is parameter and global报错的核心原因是Python语法限制:同一个函数作用域内,不允许将一个名称同时声明为函数入参和global全局变量,二者作用域规则冲突,会直接抛出语法错误。
另外需要注意:Python中整数属于不可变类型,就算绕过这个语法报错,直接把整数作为参数传入函数修改形参,也不会改动函数外部的原变量。
正确实现方案
方案1:返回值重赋值(优先推荐)
全局变量会提升代码耦合度,提升后续维护、排错成本,最优实现方式是让函数返回计算结果,外部对原变量重新赋值,逻辑清晰无副作用:
Variable = 0 def Some_function(val): return val + 1 Variable = Some_function(Variable) print(Variable)
运行代码后输出结果为1,符合需求。
方案2:全局变量场景下不要传入同名参数
如果你确定要使用全局变量实现需求,就不要把全局变量作为函数入参传递,直接在函数内部声明全局变量后操作即可:
Variable = 0 def Some_function(): global Variable Variable += 1 Some_function() print(Variable)
运行后输出1。
方案3:区分参数名和全局变量名(不推荐)
如果你需要保留Some_function(Variable)的传参写法,同时操作全局变量,只需要将函数入参命名为和全局变量不同的名称即可。但这种写法可读性差,很容易引发隐蔽的逻辑问题,非必要不使用:
Variable = 0 def Some_function(input_val): global Variable Variable = input_val + 1 Some_function(Variable) print(Variable)
运行后输出1。
内容的提问来源于stack exchange,提问作者Adil Mohammed
相关产品推荐
相关产品推荐

