1 ''' 2 1. 查找模块的顺序: 3 1. 当前目录:Python会首先搜索执行脚本所在的当前目录,也就是运行程序的工作目录。 4 2. 内置模块:如果在当前目录没有找到对应的模块,Python会接着搜索内置模块,这些模块是Python自带的,无需额外安装。 5 3. sys.path中的目录:如果在内置模块中仍然没有找到对应的模块,Python会按照sys.path中的顺序依次搜索目录。 6 sys.path是一个包含了一系列目录路径的列表,其中包括当前工作目录、PYTHONPATH环境变量指定的目录以及Python安装的默认路径。 7 Python会按照顺序遍历sys.path中的目录,直到找到与模块名对应的.py文件或包含__init__.py文件的目录。然后将该模块加载到内存中,并创建一个模块对象。 8 4. 一旦找到并加载了模块,Python会将其缓存起来,以便下次导入时可以直接从缓存中获取。 9 10 2. 最佳实践: 11 1. 组织模块:将相关功能放在同一个模块中,提高代码的可读性和维护性。合理划分模块可以减少搜索路径的长度,加快模块导入的速度。 12 2. 避免命名冲突:在导入模块时,要避免与Python内置模块或第三方库模块的命名冲突。可以通过给模块起一个具有描述性的名称、使用别名或者使用相对导入来解决冲突问题。 13 3. 使用绝对导入:尽量使用绝对导入(使用完整的模块路径)而不是相对导入,以确保模块的可移植性和可重用性。 14 15 ''' 16 17 ''' 18 def testA(a, b): 19 print(a + b) 20 ''' 21 from my_module1 import testA 22 23 ''' 24 def testA(a, b): 25 print(a - b) 26 ''' 27 from my_module2 import testA 28 29 testA(3, 1) # 2 同名时使用最后导入的
注意
1. ⾃⼰的模块名不要和已有模块名重复,否则导致模块功能⽆法使⽤
2. 使⽤from 模块名 import 功能的时候,如果功能名字重复,调⽤到的是最后定义或导⼊的功能。
示例
# 项目结构 my_project/ ├── main.py └── utils/ ├── __init__.py ├── math_operations.py └── string_operations.py
math_operations.py:
def add(a, b): return a + b def subtract(a, b): return a - b
string_operations.py:
def uppercase(s): return s.upper() def lowercase(s): return s.lower()
from utils.math_operations import add from utils.string_operations import uppercase result = add(2, 3) print(result) text = "hello" result = uppercase(text) print(result)
在这个示例中,我们使用了绝对导入来导入utils文件夹中的math_operations和string_operations模块,并调用其中的函数。通过合理组织模块和使用绝对导入,可以使代码更加清晰和易于维护。
标签:operations,定位,顺序,Python,py,导入,模块,def From: https://www.cnblogs.com/allenxx/p/17574658.html