网站首页 > 技术文章 正文
在标准的 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语言笔试模拟题,你能做对几道
- 08-03MySQL数据库的预处理详解
- 08-03《阿常·MySQL 70讲》全套教学视频
- 08-03隐式等待、显示等待和强制等待
- 08-03零基础C#上位机框架项目实例(完结篇)
- 08-03一文搞懂构建Web内容的技术
- 08-03西门子WINCC中的VBScript(VBS)常用于自动化脚本开发
- 08-03力控和sql2000之间的数据转储
- 08-03组态王|通过日历控件选择时间段查询历史报警
- 1521℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 624℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 527℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 461℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- htmlbackground-image (68)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)