rom*_*ovs 7 python import python-import
假设我foo在一个具有命名参数的大型Python项目中有一个函数bar:
def foo(bar=42):
do_something_with_bar(bar)
Run Code Online (Sandbox Code Playgroud)
在使用或省略命名bar参数的调用中,在代码库中调用此函数.
现在说我正在改变这个功能,因为它有一个bug并且想要开始使用来自某个包的函数,这也恰巧也被称为bar.bar当我像这样导入它时,我无法使用该功能:
from package import bar
def foo(bar=42):
# how can I use the package.bar function here?
do_something_with_bar(bar)
Run Code Online (Sandbox Code Playgroud)
我可以使用类似的东西:
from package import bar as package_bar
Run Code Online (Sandbox Code Playgroud)
但是这个文件也包含很多调用,bar所以这是一个禁忌.
我能看到这个工作的唯一方法是重命名bar方法package:
from package import bar
package_bar = bar
def foo(bar=42):
do_something_with_bar(package_bar(bar))
Run Code Online (Sandbox Code Playgroud)
或者多次导入(未经测试):
from package import bar, bar as package_bar
def foo(bar=42):
do_something_with_bar(package_bar(bar))
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以重命名函数中的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))
Run Code Online (Sandbox Code Playgroud)
您仍然最终导入模块一次,但现在有两种方法可供参考bar.
将函数体替换为对具有不同命名参数的另一个函数的调用:
from package import bar
def foo(bar=42):
return _foo(baz=bar)
def _foo(baz):
do_something_with_bar(bar(baz))
Run Code Online (Sandbox Code Playgroud)
然后您可以在该函数中自由使用bar包中的函数名称而不是参数。
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |