• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

python中 __name__ == '__main__'的理解

一.语义解释
1.name
name 是python的内置属性,是系统全局变量!每一个py文件都有一个属于自己的__name__:
如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称模块名);
如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”main”;
举个简单的例子:假如你名字是张三,在朋友眼中,你是张三(name == '张三');在你自己眼中,你是你自己(name == 'main'

2.”main”
“_ main _” 实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西.

3.name == “main”
当.py文件被直接运行 (Ctrl+Shift+F10)时, if name == “main” 之下的代码块将被运行,该语句就相当与python的main主函数入口,示例代码如下:
a.新建一个 my_name.py 文件,作为模块文件:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): https://www.codersrc.com
@Github:www.github.com
 
@File:my_name.py
@Time:2019/10/14 22:02
 
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
# 定义一个函数并打印 __name__
def prit_name():
 print("my_name.py __name__:", __name__)
 
if __name__ == "__main__":
 prit_name()

b.新建一个 python_main.py 文件,作为启动文件 (Ctrl+Shift+F10):

# 导入 my_name 模块
import my_name
 
# 定义一个函数并打印 __name__
def prit_name():
 my_name.prit_name()
 print("python_main.py __name__:", __name__)
 
if __name__ == "__main__":
 prit_name()

输出结果:

my_name.py __name__: my_name
python_main.py __name__: __main__

由此可见,作为启动文件 python_main.py ,该文件的内置属性 name 等于 “main”,而my_name.py 作为导入模块,该模块的 name 等于文件名(也称模块名字),所以my_name.py 中的 表达式 if name == “main” 并不成立!
当直接将my_name.py作为启动文件时 (Ctrl+Shift+F10),输出:
my_name.py name: main
如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名);
如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”main”;

二.作用
1.name == “main” 作为启动py文件的main函数入口
2.一个项目中必然会包含多个模块文件,每个模块文件在自己写完代码之后会做一些简单的测试用于检测bug 或者 对自己的函数调用写一个简单的示例,而恰到好处的是:name == “main” 既不会影响你的测试代码,也不会影响别人调用你的接口函数。

python中的main函数,只有在当做脚本运行(单独运行)的时候才会被调用,而被当做模块导入时,而__main__模块的内容不会被执行。
使用方式:

if __name__ == '__main__':
    main()

当做脚本运行
如果有如下function.py程序,当单独运行时,也就是直接运行python3 function.py时,__main__会一块输出。

print('这是function.py模块')
print('您运行的模块名字 :', __name__)

def main():
    print('main函数')

if __name__ == '__main__':
    print('执行了__main__')
    main()

它的输出内容如下所示,可以看到整个function.py程序全部被执行,包括__main__底下的内容。

这是function.py模块
您运行的模块名字 : __main__
执行了__main__
main函数

当做模块运行
假设新增了一个main_test.py程序,使用import调用function.py的模块,代码如下:

import function
print("完成!")

它的输出内容如下,可以看到它的__name__的值发生了改变,而且if name == 'main':下的内容也不会被执行!

这是function.py模块
您运行的模块名字 : function
完成!

posted on 2022-08-27 23:07  SOC验证工程师  阅读(251)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3