首页 > 编程语言 >python 中 if __name__ == '__main__'

python 中 if __name__ == '__main__'

时间:2023-08-24 20:55:08浏览次数:39  
标签:__ name 程序运行 python 代码 模块 main

当我们编写 Python 模块时,有时候需要让某些代码只在该模块作为主程序运行时才执行,而不是被其他模块 import 引入时就执行。这时候可以使用 if __name__ == '__main__' 这个条件语句。

什么是 name 变量

在 Python 中,每个模块(Python 文件)都有一个内置变量 __name__,用于指示当前模块的名称。当模块被直接运行时,__name__ 的值为 "__main__";当模块被其他模块 import 引入时,__name__ 的值为该模块的名称。

例如,在模块 test.py 中,我们可以使用下面的代码来输出 __name__ 的值:

python复制代码
print(__name__)

当我们直接运行该模块时,输出的结果为:__main__

如果在另一个模块中引入了 test.py,并调用其中的函数或变量,那么 test.py 中的 __name__ 变量的值就会变成 "test"

if name == 'main' 的作用

使用 if __name__ == '__main__' 条件语句,可以让一部分代码只在该模块作为主程序运行时执行,而不会在被其他模块导入时执行。

具体地说,当 Python 执行一个文件时,它会把该文件名赋值给 __name__ 变量,并且执行该模块中所有没有缩进的代码。因此,如果我们想要让某些代码仅在该模块作为主程序运行时才被执行,可以将这部分代码放在 if __name__ == '__main__' 语句块中。

例如,下面是一个简单的例子:

python复制代码
def main():
    print("This is the main program.")

def func():
    print("This is a function.")

if __name__ == '__main__':
    main()
    func()

在这个例子中,我们定义了两个函数 main()func(),其中 main() 函数打印出 "This is the main program.",func() 函数打印出 "This is a function."。

if __name__ == '__main__' 语句块中,我们调用了 main()func() 函数。因此,只有当该模块作为主程序运行时,这两个函数才会被执行。如果该模块被其他模块引入,if __name__ == '__main__' 条件不成立,这部分代码也就不会被执行。

常见应用场景

  • 单元测试:我们可能会将一些测试代码放在模块中,在开发阶段通过 if __name__ == '__main__' 来确保测试代码只在模块作为主程序运行时执行。
  • 调试代码:我们也可以将调试代码放在模块中,在开发阶段通过 if __name__ == '__main__' 来确保调试代码只在模块作为主程序运行时执行。
  • 命令行工具:当我们编写命令行工具时,通常将解析命令行参数的代码放在 if __name__ == '__main__' 语句块中。这样,当用户从命令行调用该工具时,解析命令行参数的代码就会被执行。

总结

if __name__ == '__main__' 是 Python 中的常用条件语句,用于判断当前模块是否为主程序运行的模块。这个语句块可以让一部分代码只在该模块作为主程序运行时才执行,而不会在被其他模块

标签:__,name,程序运行,python,代码,模块,main
From: https://www.cnblogs.com/shoshana-kong/p/17655134.html

相关文章

  • zabbix 6.0 编译安装
    1、编译安装Nginxyuminstall-ypcrepcre-devel#下载Nginxwgethttp://nginx.org/download/nginx-1.18.0.tar.gz#解压Nginxtar-zxvfnginx-1.18.0.tar.gz#编译安装Nginxcdnginx-1.18.0mkdir-p/usr/local/nginx/./configure--prefix=/usr/local/nginx/--wi......
  • 如何使用缓存 | 热点Key处理
    热点Key当热点key缓存失效后,会有大量线程进行缓存重建。有的热点key不能再短时间内完成,可能需要复杂的计算,多次IO等。在缓存失效的瞬间,有大量线程来重建缓存,也就是会直接访问到后端,这会造成后端负载加大,严重的甚至可能导致应用崩溃,也就是-缓存击穿。解决方案1.分布式锁加......
  • 算法
    STL中算法是functiontemplate。算法看不见容器,对其一无所知,所以它所需要的一切信息都必须从itertor取得,而iterators(由容器提供)必须能够回答算法的所有提问,才能搭配该算法的所有操作。迭代器的分类:structinput_iterator_tag{};structoutput_iterator_tag{};structf......
  • 「学习笔记」浅入模拟退火
    什么是退火?来自百度百科退火是一种金属热处理工艺,指的是将金属缓慢加热到一定温度,保持足够时间,然后以适宜速度冷却。目的是降低硬度,改善切削加工性;降低残余应力,稳定尺寸,减少变形与裂纹倾向;细化晶粒,调整组织,消除组织缺陷。准确的说,退火是一种对材料的热处理工艺,包括金属材料、非......
  • Windows Server2008R2 服务器Paged Pool占用过高的问题
    这台服务器一直运行的好好的,但最近发现经常内存占用了99%,重启后过几天内存又涨到99%。运行的应用软件占的内存并不高,任务管理器所有进程占用内存加起来也远远不到99%。下载了RamMap,发现是PagedPool占用了绝大多数的内存; 下载poolmon.exe,终端中运行poolmon.exe-p-b,再按下......
  • C#中?的相关使用
     C#中?的相关使用1.可空类型使用后可以使值类型的变量,既可以接收null也可以接收正常的值类型。int?a=null;a=10;2.可空运算符使用?前:if(object!=null){//方法调用object.method();}if(array!=null){//数组索引inta=array[1];......
  • C++11 四种强制类型转换的区别
    static_cast:指针强转,如果某个基类有多个子类,基类的指针实际是指向A类的对象,但使用强转为B类对象,运行时会报错,静态强转没做检测dynamic_cast:只能用于虚函数类,子类与父类指针互转,会检测,转换失败为返回空,不会崩const_cast:用于转换常量,修改常量,先用一个常......
  • C++拷贝构造、赋值函数
    拷贝构造拷贝构造就是一种特殊版本的构造函数,格式:类名(const类名&that){    //执行给每个成员变量进行赋值  }什么时候会调用拷贝构造:当使用旧对象(已new的)给新对象(新new的)初始化时,会自动调用拷贝构造    Testt1;//调用无参构造Testt2=t1......
  • Linux之Shell脚本与Nginx
    1.入门Shell脚本1.1HelloWord打开我们的finalshell软件连接虚拟机在/usr/local/下创建一个点后缀为test的文件且编辑文件文件头部固定语句必须输入#!/bin/bash随后在下面我们直接输出一句Helloword按下ESC键且输入:wq保存退出后,这时不能直接执行,因为这个时候的文件你......
  • eclipse安装
    1.下载安装eclipse法一:网盘下载链接:https://pan.baidu.com/s/14FRu6jrT6I58xmFsAFTI5Q提取码:wsen法二:官方下载链接:http://www.eclipse.org/downloads/点击 DownloadPackages 根据系统选择 选择SelectAnotherMirror选择China.. 捐款页面不要理会 下载完成......