面试题答案
一键面试原理
当使用 as
给函数指定别名进行模块导入时,Python 会将别名作为新的命名空间中的名称。命名冲突发生在不同模块中的函数别名相同的情况下。Python 通过名称解析机制,优先在当前命名空间中查找名称,若找不到再到外层命名空间查找。所以为避免冲突,需确保在同一命名空间下每个别名唯一。
解决方法及代码示例
- 使用不同的别名
# 模块1:module1.py def func(): return "This is func in module1" # 模块2:module2.py def func(): return "This is func in module2" # 主程序 import module1 as m1 import module2 as m2 result1 = m1.func() result2 = m2.func() print(result1) print(result2)
- 在导入时使用不同的别名
from module1 import func as func1 from module2 import func as func2 result1 = func1() result2 = func2() print(result1) print(result2)
- 使用包结构并规范导入路径
- 假设项目有如下结构:
- project/
- subpackage1/
- module1.py
- subpackage2/
- module2.py
- subpackage1/
- project/
- 在
module1.py
中:def func(): return "This is func in subpackage1.module1"
- 在
module2.py
中:def func(): return "This is func in subpackage2.module2"
- 在主程序中:
from subpackage1.module1 import func as func_from_subpackage1 from subpackage2.module2 import func as func_from_subpackage2 result1 = func_from_subpackage1() result2 = func_from_subpackage2() print(result1) print(result2)
- 假设项目有如下结构: