Python项目中如何导入并调用两个文件夹下的同名函数
如何为导入的同名文件设置别名
问题场景
当前工作项目的PROJECT目录下存在branch1和branch2两个文件夹,两个文件夹中均存放有同名文件solution.py,且两个文件内都定义了同名函数do。
原有运行失败的代码如下:
# Write your code here from branch1 import do as a from branch2 import do as b # Keep the code below a.do() b.do() # 运行报错
错误原因
原有代码无法运行存在两个核心问题:
- 导入路径错误:
do函数定义在对应文件夹下的solution.py文件中,原导入语句未指定到solution模块层级,Python解释器无法定位到目标函数 - 别名逻辑不匹配:若直接给导入的函数设置别名,别名本身就是可直接调用的函数对象,无需额外追加
.do()后缀;原代码中# Keep the code below标注下的a.do()、b.do()调用逻辑不可修改,说明别名需要指向模块层级,而非单个函数。
正确实现方式
仅需修改导入部分代码,给两个路径下的solution模块分别设置别名即可,无需改动下方保留的调用逻辑:
# Write your code here from branch1 import solution as a from branch2 import solution as b # Keep the code below a.do() b.do()
上述写法中,a是branch1/solution.py模块的别名,b是branch2/solution.py模块的别名,调用a.do()、b.do()时会分别执行两个文件中定义的do函数,完全避免同名文件、同名函数的命名冲突。
补充说明
- 为避免不同Python版本的导入兼容问题,建议在
branch1、branch2两个文件夹内分别创建空的__init__.py文件,让Python解释器将两个文件夹识别为可导入的正式包 - 如果不需要保留原有
a.do()的调用写法,也可以直接导入函数并设置别名,调用时直接使用别名加括号即可,示例如下:from branch1.solution import do as do_branch1 from branch2.solution import do as do_branch2 do_branch1() do_branch2()
内容的提问来源于stack exchange,提问作者ERJAN
相关产品推荐
相关产品推荐

