Python文件的执行顺序是怎样的
Table of Contents
Python 文件的执行顺序是逐行解释执行的,但具体的流程会因代码结构(如函数、类、模块导入等)有所不同。
1. 模块级别的代码执行
Python 解释器从文件的第一行开始,按顺序执行所有不在函数、类或条件块中的代码(称为“模块级代码”)。例如:
# 模块级代码:直接执行
print("1. 这是模块级别的代码,最先执行")
def my_function():
print("3. 这是函数内的代码,调用时才会执行")
class MyClass:
print("2. 这是类定义中的代码,类加载时执行")
def __init__(self):
print("4. 这是类实例化时执行的代码")
# 模块级代码:继续执行
print("2. 继续执行模块级代码")
输出顺序:
1. 这是模块级别的代码,最先执行
2. 这是类定义中的代码,类加载时执行
3. 继续执行模块级代码
2. 函数和类的定义
- 函数定义(
def
):
解释器会记录函数的名称和代码体,但不会执行函数内的代码。只有在函数被调用时,才会执行函数内部的代码。 - 类定义(
class
):
解释器会执行类定义内的模块级代码(如类属性的赋值、print
语句等),但不会执行类方法中的代码(如__init__
、method
等)。
示例:
print("1. 模块级代码")
def func():
print("3. 函数被调用时执行")
class MyClass:
print("2. 类定义中的模块级代码") # 直接执行
def __init__(self):
print("4. 类实例化时执行")
func() # 调用函数
obj = MyClass() # 实例化类
输出顺序:
4. 模块级代码
5. 类定义中的模块级代码
6. 函数被调用时执行
7. 类实例化时执行
3. 模块导入(import
)
当导入其他模块时,被导入模块的模块级代码会立即执行。例如:
# 文件 `module_a.py`
print("模块A的模块级代码被执行")
def func_a():
print("模块A的函数被调用")
# 文件 `main.py`
print("1. main模块的代码开始执行")
import module_a # 导入时会执行module_a的模块级代码
print("2. main模块的代码继续执行")
module_a.func_a() # 调用module_a中的函数
输出顺序:
8. main模块的代码开始执行
模块A的模块级代码被执行
1. main模块的代码继续执行
模块A的函数被调用
4. if __name__ == "__main__"
块
- 当 Python 文件作为主程序直接运行时,
__name__
的值为"__main__"
,此时会执行该条件块中的代码。 - 当文件被作为模块导入时,
__name__
的值为模块名,条件块中的代码不会执行。
示例:
print("1. 模块级代码总是执行")
if __name__ == "__main__":
print("2. 仅当文件直接运行时执行")
直接运行时的输出:
2. 模块级代码总是执行
3. 仅当文件直接运行时执行
作为模块导入时的输出:
4. 模块级代码总是执行
5. 执行顺序的完整流程
- 解析文件:解释器读取并解析整个文件。
- 执行模块级代码:按顺序执行所有不在函数、类或条件块中的代码。
- 处理定义:记录函数和类的定义(类定义中的模块级代码会立即执行)。
- 执行
if __name__ == "__main__"
块(如果文件是主程序)。 - 调用函数或实例化类:按代码逻辑触发函数或类的执行。
通过理解这些规则,可以更好地控制代码的执行顺序,避免因逻辑错误导致的问题。
明天聊聊赚钱这件事