学习过C语言或者Java语言的盆友应该都知道程序运行必然有主程序入口main函数,而python却不同,即便没有主程序入口,程序一样可以自上而下对代码块依次运行,然后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(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@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__”  既不会影响你的测试代码,也不会影响别人调用你的接口函数。

猜你喜欢:

1.python模块

2.python异常处理

3.python return逻辑运算表达式

4.python 字典推导式

5.python 列表推导式

转载请注明:猿说Python » python __name__ == “__main__” 详细解释

技术交流、商务合作请直接联系博主
扫码或搜索:猿说python
猿说python
微信公众号 扫一扫关注

python __name__ == ‘__main__’详细解释(27)的更多相关文章

  1. 关于python中__name__=='__main__'的解释

    调用文章是:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318451 ...

  2. python--关于if __name__==__main__的解释

    在解释之前首先我们看下__name__这个变量存的是什么: #!/usr/bin/env python # -*- coding:utf-8 -*- print(__name__) 结果: __mai ...

  3. Python - __name__=='__main__'是干啥的,以及python -m与python的区别

    1. __name__=='__main__'是干啥的 先看例子,准备a.py和b.py放在同一个文件夹中 vi a.py # coding: utf-8 print("i am just ...

  4. python __name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  5. Python __name__="__main__"的作用

    该语句加在模块的最后,可以让这个模块,即可以被别人import,又可以直接运行. fibo.py文件: def fibo(): pass # fibo函数的内容 if __name__==" ...

  6. Python - __name__ == '__main__'

    if __name__ == '__main__': app.run() __name__系统变量指示模块应如何被加载,他的值为"__main__"时表示当前模块是被直接执行. _ ...

  7. python内置类型详细解释

    文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...

  8. if __name__ == "__main__"的疑惑

    Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...

  9. python基础8之自定义模块、if __name__==__main__:解释

    一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

随机推荐

  1. learning scala Function Recursive Tail Call

    可以使用scala库,可以从字面上看出是在调用 递归函数: code import scala.util.control.TailCalls._ val arrayDonuts: Array[Stri ...

  2. TensorFlow(七):tensorboard网络执行

    # MNIST数据集 手写数字 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # ...

  3. IDEA上安装Scala环境执行测试

    1.安装scala IDEA下载Scala插件 IDEA->setting->Plugin->搜索Scala->选择Scala,然后, 2.删除火狐软件 sudo apt-ge ...

  4. netcore 发布到IIS上常见错误

    1 出现AspNetCoreModuleV2错误 报错原因: 你的IIS服务器上的.net core 运行时不是最新的,导致AspNetCoreModuleV2模块缺失或者报错,意思需要你更新了! 2 ...

  5. 系统调优:如何解决系统报错too many open files

    一.检查系统版本是否手工升级 关于lsb_release -a和/etc/issue显示的发行版本号不同,原因只有一个:系统内核手动升级了 对于高并发高http连接的应用程序例如www或Java,会遇 ...

  6. [Ubuntu] sudo apt-get update指令执行失败

    系统:Ubuntu 16.04 LTS 安装软件前执行 sudo apt-get update 更新,但是提示失败如下: 网上搜索后,因为连接不到 US 的服务器,所以更新失败,需要在系统设置中将源服 ...

  7. Linux如何使用shell命令检测PHP木马防止脚本木马的破坏

    1.一句话查找PHP木马 代码如下 # find / -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gun ...

  8. win10 合并磁盘 disk Acronis Disk Director

    硬盘调整C盘大小的工具.zip 无损分区软件(Acronis Disk Director)下载 11.0 破解版  ADD11H_trial_en-US(11.0.0.2343).exe 注册码: E ...

  9. docker pull 失败: server misbehaving

    在docker pull 镜像时一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lo ...

  10. Vue的axios如何全局注册

    最近用 Vue 写项目的时候,用到 axios ,因为 axios 不能用 Vue.use() ,所以在每个 .vue 文件中使用 axios 时就需要 import , .vue 文件少的话还好说, ...