python - 在 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
解决方案
这是一个常见的问题。在这种情况下,为 增加一个 import 语句会很有帮助,因此您可以通过命名空间package
安全地引用package
' ,而不会遇到命名冲突。bar
package
import package
from package import bar
def foo(bar=42):
do_something_with_bar(package.bar(bar))
您仍然最终会导入该模块一次,但您现在有两种引用bar
.
推荐阅读
- json - 如何更新雪花中的半结构化数据?
- java - 如何使用 ImageView 而不是菜单项制作底部导航栏?
- java - 为什么 Spring boot 不接受我的 Axios POST 请求?
- distributed - 我可以将文件块存储在 IPFS 网络中的不同系统中吗?
- sql - 开始在具有非顺序 GUID 的表中添加顺序 GUID 是否存在性能问题
- ruby-on-rails - 如何打印rails应用程序中每个条目的待处理任务计数
- python - 将 numpy 数组传递给 opencv 函数 inputarray 导致数组更改
- python - 如何在可能有一些失真的网格中订购 cv2 轮廓?
- mysql - 如何计算每个用户mysql的timediff
- angular - Angular 9 - 存储的值永远不应该是 NO_CHANGE