网站首页 > 技术文章 正文
在标准的 Python 执行环境中,if __name__ == "__main__" 语句块就是专门用于判断脚本是否作为主程序直接运行的。
示例一:简单的函数定义与测试
def add_numbers(a, b):
"""
两个数相加的函数
"""
return a + b
if __name__ == "__main__":
num1 = 5
num2 = 3
result = add_numbers(num1, num2)
print(f"{num1} + {num2} 的结果是: {result}")
在这个示例中,add_numbers 函数定义了两个数相加的功能。if __name__ == "__main__" 块中的代码用于测试这个函数,当直接运行该脚本时,会执行测试代码并输出结果。如果该脚本被其他脚本导入,add_numbers 函数可以被使用,但测试代码不会执行。
示例二:类的定义与实例化测试
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"我叫 {self.name},今年 {self.age} 岁。")
if __name__ == "__main__":
person = Person("Alice", 25)
person.introduce()
这里定义了 Person 类,包含构造函数 __init__ 和方法 introduce。if __name__ == "__main__" 块用于创建 Person 类的实例并调用 introduce 方法进行测试。当该脚本被导入到其他脚本中时,Person 类可以被实例化和使用,但测试代码不会运行。
示例三:模块之间的导入与使用
假设有两个脚本文件,module1.py 和 module2.py。
module1.py 的内容如下:
def multiply_numbers(a, b):
return a * b
if __name__ == "__main__":
num1 = 4
num2 = 6
result = multiply_numbers(num1, num2)
print(f"{num1} * {num2} 的结果是: {result}")
module2.py 的内容如下:
import module1
# 调用 module1 中的函数
product = module1.multiply_numbers(3, 5)
print(f"在 module2 中调用的结果是: {product}")
在这个例子中,module1 定义了一个函数 multiply_numbers 并在 if __name__ == "__main__" 块中进行了测试。module2 导入了 module1 并调用了其中的函数。当运行 module1.py 时,测试代码会执行;当运行 module2.py 时,module1 中的测试代码不会执行,只会执行 module2 中调用函数的相关代码。
在正常的 Python 代码执行逻辑中,只有当脚本被直接运行时,if __name__ == "__main__" 语句块内的代码才会被执行,没有其他常规情况下会执行该语句块 。
__name__ 是 Python 中每个模块都有的内置属性。当一个 Python 脚本作为主程序直接运行时,Python 会将该脚本的 __name__ 属性设置为 "__main__"。而当一个脚本被导入作为模块使用时,__name__ 的值会被设置为该模块的名称(即文件名去掉 .py 后缀),因此 if __name__ == "__main__" 条件不成立,其内部代码块不会被执行。
猜你喜欢
- 2025-05-26 求职者看过来!最常见的五个面试问题如何答
- 2025-05-26 uboot-main_loop函数分析
- 2025-05-26 太阳的体检表 太阳系漫游①|观天者说
- 2025-05-26 这篇if __name__ == '__main__'讲解的实在太通透了,它还能影响这些
- 2025-05-26 providing/provided ( that)和if作“如果”讲的区别
- 2025-05-26 为什么要写__name__ 是 "__main__"?
- 2025-05-26 条件编译
- 2025-05-26 常用的虚拟语气句型if it wasn't/weren't for用法解析
- 2025-05-26 btrace 开源!基于 Systrace 高性能 Trace 工具
- 2025-05-26 10道C语言笔试模拟题,你能做对几道
- 最近发表
-
- 使用这个新的 ECMAScript 运算符告别 Try/Catch!
- 抛弃 try-catch,错误处理的新方案
- 深圳尚学堂Java培训:总结java编程常用的快捷键(二)
- Try-catch speeding up my code?(speeding up)
- 能代替try catch处理异常的优雅方式
- Linux系统stress压力测试工具(linux自带的压力测试)
- ESL-通过事件控制FreeSWITCH(es事务控制)
- 谈JVM xmx, xms等内存相关参数合理性设置
- 嵌入式工程师竟然看不懂这些专业语句,那真别怪人说你菜
- 不会前端也能写官网?没问题,Devbox+Cursor 带你起飞
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)