Python中函数名与局部参数重名时如何调用外部同名函数
方案1:通过globals()直接获取全局函数
你可以直接通过Python内置的globals()方法读取模块全局命名空间里的normalize函数,完全避开和局部参数的命名冲突,代码改动最小:
def normalize(x): return x * 100 def double(n, normalize = True): n = n * 2 if normalize: # 直接从全局符号表取外层的normalize函数 n = globals()['normalize'](n) return n
方案2:通过默认参数提前绑定外层函数
你也可以利用Python函数默认参数在定义阶段求值的特性,提前把外层的normalize函数绑定到一个私有参数上,不需要访问全局符号表:
def normalize(x): return x * 100 # 下划线开头的参数属于约定的私有参数,外部调用时不需要传入 def double(n, normalize = True, _normalize = normalize): n = n * 2 if normalize: n = _normalize(n) return n
两种方案都不需要修改原有函数、参数的命名,也不需要额外定义全局的函数副本,比你当前的实现更简洁。如果你的代码后续不会做模块结构的大改动,方案1的写法更直观,改动量最小。
内容的提问来源于stack exchange,提问作者wch
相关产品推荐
相关产品推荐

