在Python中,if __name__ == '__main__':
这行代码有一个非常特定的用途。要理解这一点,首先需要了解Python中的__name__
变量。
__name__
变量
- 当Python脚本被直接运行时,
__name__
变量被设置为'__main__'
。 - 当模块(一个Python文件)被导入到其他脚本中时,
__name__
变量则被设置为该模块的名字。
if __name__ == '__main__':
的作用
这行代码的作用是判断当前脚本是被直接运行还是被导入为模块。如果这个条件为真(即脚本被直接运行),那么紧随其后的代码块将被执行。如果这个条件为假(即脚本被导入为模块),那么这部分代码将不会被执行。
为什么使用它?
这种用法有几个好处:
-
模块重用:允许一个Python文件既可以作为可执行脚本运行,也可以作为模块被其他脚本导入而不会执行不需要的代码。这对于库和工具的开发非常有用。
-
代码组织:它鼓励开发者将测试代码、示例代码或其他仅当文件作为脚本运行时才需要的代码放在
if __name__ == '__main__':
块中,使得模块的主体部分更加清晰,专注于提供函数、类和变量等。 -
避免命名冲突:当模块被导入时,它定义的全局变量和函数可能会与导入它的脚本中的全局变量和函数冲突。通过将仅在脚本直接运行时才需要执行的代码放在
if __name__ == '__main__':
块中,可以减少这种冲突的可能性。
示例
假设有一个名为mymodule.py
的文件,内容如下:
def foo():
print("foo() in mymodule")
if __name__ == '__main__':
# 这部分代码只有在mymodule.py被直接运行时才会执行
print("mymodule is being run directly")
else:
# 这部分代码不会被执行,如果mymodule.py被导入
print("mymodule has been imported")
- 如果你直接运行
mymodule.py
,输出将是:mymodule is being run directly
- 如果你在另一个Python脚本中导入
mymodule
,如:import mymodule mymodule.foo()
那么输出将是:foo() in mymodule
并且
mymodule.py
中的else
块(即print("mymodule has been imported")
)实际上不会打印,因为它被包含在if __name__ == '__main__':
块之外的条件分支中。但需要注意的是,这里的解释是为了说明逻辑,实际上else
块在上面的示例中并不存在打印语句,只是为了说明如果存在的话它不会被执行。
总之,if __name__ == '__main__':
是Python中一种非常有用的模式,用于区分代码是作为脚本直接运行还是被导入为模块使用。
public static void main 这个如绕口令一般的程序入口函数,即使写一个hello world也不可避免:
相比之下 Python 就简单多了,0帧起手,直接 print:
print('Hello World!')
但如果你的Python练习时长超过2周半,就一定见过这样的写法:
不管是教程里的示例、Github上别人的项目、还是AI生成的代码,都可能出现这行判断语句。
最后这里免费分享给大家一份Python全套学习资料,包含视频、源码。课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以加我微信一起来学习交流。
① Python所有方向的学习路线图
,清楚各个方向要学什么东西
② 100多节Python课程视频
,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例
,学习不再是只会理论
④ 华为出品独家Python漫画教程
,手机也能学习
⑤ 历年互联网企业Python面试真题
,复习时非常方便