if __name__ == 'main':

功能


一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。

if __name__ == 'main': 的作用:

就是控制这两种情况执行代码的过程,在“if __name__ == 'main': ”下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的

原理


每个python模块(python文件,也就是*.py)都包含内置的变量__name__。

1. 当运行模块(A.py)作为脚本自己去运行的话,对应的模块名始终叫做__main__,即模块A.py文件本身,而__name__等于模块名称,也就等于__main__;

2. 如果模块(A.py)import到其他模块(B.py)中,对应的模块名叫做A,则__name__等于模块名称A。

所以,当模块被直接执行时,__name__ == '__main__'结果为真;当模块被import到其他的python脚本中被调用执行,不满足__name__=="__main__"的条件,因此,无法执行其后的代码。

test.py

print("I'm the first.")
print(__name__)
if __name__=="__main__":
print("I'm the second.")

python test.py的结果:

I'm the first.
__main__
I'm the second.

import_test.py

import test

python import_test.py的结果:

I'm the first.
test

此时,test.py中的__name__变量值为test,不满足__name__=="__main__"的条件,因此,无法执行其后的代码。

__name__


如果是放在Modules模块中,就表示是模块的名字;

如果是放在Classs类中,就表示类的名字

__main__


模块第一次被导出(import)后,系统会自动为其创建一个域名空间(namespace);(模块,都是有自己的名字的)此处的脚本的主模块的名字,始终都叫做__main__。

【参考文档】

python编程中的if __name__ == 'main': 的作用和原理:http://www.dengfeilong.com/post/60.html

Python中的__name__和__main__含义详解:https://blog.csdn.net/jjwen/article/details/53084882

Python中的__name__和__main__含义详解: https://www.crifan.com/python_detailed_explain_about___name___and___main__/comment-page-1/

if __name__ == 'main': 的作用和原理的更多相关文章

  1. python编程中的if __name__ == 'main': 的作用和原理

    在大多数编排得好一点的脚本或者程序里面都有这段if __name__ == 'main': ,虽然一直知道他的作用,但是一直比较模糊,收集资料详细理解之后与打架分享. 1.这段代码的功能 一个pyth ...

  2. python if __name__ == 'main' 的作用和原理()

    相信初学者在学习Python的过程中,不可避免的总会遇到 if __name__ == 'main'语句,虽然一直知道它的作用,但是可能一直比较模糊,今天菜鸟分析就与大家一起举例说说我的理解. 举个例 ...

  3. Python中if __name__ == 'main' 的作用和原理

    参考网址:http://mp.weixin.qq.com/s/kxxhOQ7KB_VMwWeUENX7OQ t1.py: print('Loving Python') def main(): prin ...

  4. Python 中if __name__ == '__main__': 的作用和原理

    转自https://blog.csdn.net/weixin_42660771/article/details/84035153 1.代码的功能 一个python的文件有两种使用的方法,第一是直接作为 ...

  5. 如何理解python中的if __name__=='main'的作用

    一. 一个浅显易懂的比喻 我们在学习python编程时,不可避免的会遇到if __name__=='main'这样的语句,它到底有什么作用呢? <如何简单地理解Python中的if __name ...

  6. if __name__ == '__main__'的作用和原理

    最简单的理解就是这样: __name__ 是当前模块名,当模块被直接运行时,模块名为 __main__. 所以 if __name__ == '__main__' 这句话的意思就是当前模块被直接运行时 ...

  7. Python中if __name__ == '__main__':的作用和原理

    if __name__ == '__main__':的作用 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行. ...

  8. python编程中的if __name__ == 'main与windows中使用多进程

    if __name__ == 'main 一个python的文件有两种使用的方法,第一是直接作为程序执行,第二是import到其他的python程序中被调用(模块重用)执行. 因此if __name_ ...

  9. python中的if __name__ == 'main'

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用: 对于编程语言来说,程序都必须要有一个入口,比如java和c#必须要 ...

随机推荐

  1. 自己用的Xshell配色方案

    [comfort]text=dce2e2cyan(bold)=2ad1b8text(bold)=dce2e2magenta=dd3682green=55bb55green(bold)=55bb55ba ...

  2. Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

  3. Ubuntu 16.04 强制使用ipv4安装apt-get

    参考文献:https://www.linuxidc.com/Linux/2015-09/123340.htm 起因:每次校园网都要自动用ipv6不知道为什么又总之链接不上,导致安装失败,有以下命令强行 ...

  4. java8_api_格式化数据

    格式化数据1    Locale类    格式化日期时间    格式化数字        Locale类,主要是国际化相关        该类代表语言环境        实例化:           ...

  5. Flutter Inspector 功能:Toggle Platform,Show Debug Paint,Show Paint Baselines

    Flutter Inspector 功能 说明 Toggle Platform 切换操作系统(Android.iOS) Show Debug Paint Show Paint Baselines Wi ...

  6. 闲话Pipeline In Maya

    在整个行业都在高呼“农业学大寨,流程学xx”的大背景下,你想推出一个新的更好的流程有着极大的难度. 在2014年的时候行业内大部分公司就有了资产的概念,会成立资产部门去专门创建资产,供后续环节多次重用 ...

  7. CentOS install duplicity

    yum -y updateyum -y install epel-releaseyum -y install ncftp screen # Compilers and related tools:yu ...

  8. oracle over 函数几个例子

    测试使用的数据为scott/tiger模式下的emp表: 我们使用JOB和SAL这两个列测试: 上面语句指按照职业JOB分组(partition by job)然后在每个分组内,按照薪水(sal)进行 ...

  9. Intel_AV-ICE06加速卡+QAT_Engine测试

    Intel AV-ICE06加速卡测试报告 Intel RSA加速卡结合Intel其QAT_Engine测试性能的提升,其支持的异步模式对性能的提升很大. 注意QAT_Engine只支持openssl ...

  10. go中单链表

    package main import ( "fmt" ) type ListNode struct { Val int Next *ListNode } type List st ...