Python __name__=='__main__'作用详解


Python __name__=='__main__'作用详解

在阅读别人编写的自定义模块时,你会经常看到下面这句话:

Python 全选
if __name__ == '__main__':

这一行代码的作用是什么?本节详细解释其功能如下。

一般情况下,当我们写完自定义模块后,我们会写一个测试代码来检查一些模块中的每个功能是否能够成功运行。例如,创建一个candf.py文件并编写以下代码:

Python 全选
'''
摄氏度和华氏度的相互转换模块
'''
def c2f(cel):
    fah = cel * 1.8 + 32
    return fah
def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel
def test():
    print("测试数据:0 摄氏度 = %.2f 华氏度" % c2f(0))
    print("测试数据:0 华氏度 = %.2f 摄氏度" % f2c(0))
test()

单独运行此模块文件,您可以看到以下结果:

 
测试数据:0 摄氏度 = 32.00 华氏度
测试数据:0 华氏度 = -17.78 摄氏度

在candf.py模块文件的基础上,在同一目录下创建另一个demo.py文件,并编写以下代码:

Python 全选
import candf
print("32 摄氏度 = %.2f 华氏度" % candf.c2f(32))
print("99 华氏度 = %.2f 摄氏度" % candf.f2c(99))

运行demo.py文件,运行结果如下:

 
测试数据:0 摄氏度 = 32.00 华氏度
测试数据:0 华氏度 = -17.78 摄氏度
32 摄氏度 = 89.60 华氏度
99 华氏度 = 37.22 摄氏度

如您所见,Python解释器一起运行模块(candf.py)中的测试代码,这不是我们想要的结果。避免这种情况的关键是让Python解释器知道目前要运行的级别代码是模块文件本身还是其他导入模块的程序。

为了实现这一点,我们需要使用Python内置的系统变量__name__,该变量用于标识模块的模块名。例如,在demo.py程序文件中,添加以下代码:

Python 全选
print(__name__)
print(candf.__name__)
其运行结果为:
__main__
candf

可以看到,当前运行的程序的__name__的值是__main__,而导入到当前程序的模块的__name__的值是它自己的模块名。

 

因此,如果_ _ name _ _ = =' ___ main __ ':函数是保证这个表达式只有在模块单独运行时才有效,然后就可以输入这个判断语法并在其中执行测试代码;相反,如果只是作为模块导入到其他程序文件中,这个表达式就不会有效,在其他程序运行时也不会执行这个判断语句中的测试代码。

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:HEU KMS Activator -全能Windows/Office激活神器
下一篇:Python数组List检索 三种方法从数组List中检索出符合要求的元素
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

Python __name__=='__main__'作用详解
Webpack讲解:devTool中SourceMap模式详解
YESWEB 开发框架 路由配置文件 作用原理
Python Windows服务
position: sticky;设置无效,不起作用
python四种配置文件
Python 重构Print 日志记录
Python使用SQL Server数据库
Python pyinstaller 打包参数说明
Python安装
Python Selenium ChromeDriver 规避检测
CSS backdrop-filter 属性详解及使用方法
Python Selenium使用火狐浏览器驱动
Python 打印日志格式,并且支持不同颜色和背景色
python安装pythoncom模块
详解ElasticAPM实现微服务的链路追踪(NET)
Python暂停程序执行
.NET Core中使用编码GB2312报错‘GB2312‘ is not a supported encoding name 解决方案
Python多线程中试用wmi报错
Python多版本管理

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码