首页 > 解决方案 > 在 Python 中重命名命名参数以避免与 import 语句的命名冲突

问题描述

假设我foo在一个具有命名参数的大型 Python 项目中有一个函数bar

def foo(bar=42):
  do_something_with_bar(bar)

这个函数在代码库中被大量调用,在使用或省略命名bar参数的调用中。

现在说我正在更改这个函数,因为它有一个错误,并且想要开始使用某个包中的一个函数,巧合的是,它也被称为bar. bar当我像这样导入它时,我无法使用该功能:

from package import bar

def foo(bar=42):
  # how can I use the package.bar function here?
  do_something_with_bar(bar)

我可以使用类似的东西:

from package import bar as package_bar

但是这个文件也包含很多的调用bar所以这是不行的。

我可以看到这个工作的唯一方法是将bar方法重命名为package

from package import bar
package_bar = bar

def foo(bar=42):
  do_something_with_bar(package_bar(bar))

或多次导入(未经测试):

from package import bar, bar as package_bar

def foo(bar=42):
  do_something_with_bar(package_bar(bar))

有什么方法可以重命名函数中的bar参数,而不会在整个代码库中中断foo对函数的所有调用?foo

标签: pythonimportpython-import

解决方案


这是一个常见的问题。在这种情况下,为 增加一个 import 语句会很有帮助,因此您可以通过命名空间package安全地引用package' ,而不会遇到命名冲突。barpackage

import package
from package import bar

def foo(bar=42):
    do_something_with_bar(package.bar(bar))

您仍然最终会导入该模块一次,但您现在有两种引用bar.


推荐阅读