python __name__ == ‘__main__’详细解释(27)
学习过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__” 既不会影响你的测试代码,也不会影响别人调用你的接口函数。
猜你喜欢:
转载请注明:猿说Python » python __name__ == “__main__” 详细解释

python __name__ == ‘__main__’详细解释(27)的更多相关文章
- 关于python中__name__=='__main__'的解释
调用文章是:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318451 ...
- python--关于if __name__==__main__的解释
在解释之前首先我们看下__name__这个变量存的是什么: #!/usr/bin/env python # -*- coding:utf-8 -*- print(__name__) 结果: __mai ...
- Python - __name__=='__main__'是干啥的,以及python -m与python的区别
1. __name__=='__main__'是干啥的 先看例子,准备a.py和b.py放在同一个文件夹中 vi a.py # coding: utf-8 print("i am just ...
- python __name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- Python __name__="__main__"的作用
该语句加在模块的最后,可以让这个模块,即可以被别人import,又可以直接运行. fibo.py文件: def fibo(): pass # fibo函数的内容 if __name__==" ...
- Python - __name__ == '__main__'
if __name__ == '__main__': app.run() __name__系统变量指示模块应如何被加载,他的值为"__main__"时表示当前模块是被直接执行. _ ...
- python内置类型详细解释
文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...
- if __name__ == "__main__"的疑惑
Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...
- python基础8之自定义模块、if __name__==__main__:解释
一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
随机推荐
- learning scala Function Recursive Tail Call
可以使用scala库,可以从字面上看出是在调用 递归函数: code import scala.util.control.TailCalls._ val arrayDonuts: Array[Stri ...
- TensorFlow(七):tensorboard网络执行
# MNIST数据集 手写数字 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # ...
- IDEA上安装Scala环境执行测试
1.安装scala IDEA下载Scala插件 IDEA->setting->Plugin->搜索Scala->选择Scala,然后, 2.删除火狐软件 sudo apt-ge ...
- netcore 发布到IIS上常见错误
1 出现AspNetCoreModuleV2错误 报错原因: 你的IIS服务器上的.net core 运行时不是最新的,导致AspNetCoreModuleV2模块缺失或者报错,意思需要你更新了! 2 ...
- 系统调优:如何解决系统报错too many open files
一.检查系统版本是否手工升级 关于lsb_release -a和/etc/issue显示的发行版本号不同,原因只有一个:系统内核手动升级了 对于高并发高http连接的应用程序例如www或Java,会遇 ...
- [Ubuntu] sudo apt-get update指令执行失败
系统:Ubuntu 16.04 LTS 安装软件前执行 sudo apt-get update 更新,但是提示失败如下: 网上搜索后,因为连接不到 US 的服务器,所以更新失败,需要在系统设置中将源服 ...
- Linux如何使用shell命令检测PHP木马防止脚本木马的破坏
1.一句话查找PHP木马 代码如下 # find / -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gun ...
- win10 合并磁盘 disk Acronis Disk Director
硬盘调整C盘大小的工具.zip 无损分区软件(Acronis Disk Director)下载 11.0 破解版 ADD11H_trial_en-US(11.0.0.2343).exe 注册码: E ...
- docker pull 失败: server misbehaving
在docker pull 镜像时一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lo ...
- Vue的axios如何全局注册
最近用 Vue 写项目的时候,用到 axios ,因为 axios 不能用 Vue.use() ,所以在每个 .vue 文件中使用 axios 时就需要 import , .vue 文件少的话还好说, ...