Python – __name__==’__main__’是干啥的,以及python -m与python的区别

Python – __name__==’__main__’是干啥的,以及python -m与python的区别转自牛人: https://www.cnblogs.com/ddzj01/p/10919210.html1.__name__=='__main__'是干啥的先看例子,准

大家好,又见面了,我是你们的朋友全栈君。

转自牛人: https://www.cnblogs.com/ddzj01/p/10919210.html

1. __name__==’__main__’是干啥的

先看例子,准备a.py和b.py放在同一个文件夹中
vi a.py

01
02
03
04
05
# coding: utf-8
print(
"i am just print"
)
      
if 
__name__ ==
'__main__'
:
    
print(
"i am a.py main"
)

    
vi b.py   

01
02
03
04
05
06
# coding: utf-8
print(
"----------------"
)
import 
a
print(
"----------------"
)
if 
__name__ ==
'__main__'
:
    
print(
"i am b.py main"
)

 

python a.py  #执行a.py文件

01
02
i am just print
i am a.py main

 

python b.py  #执行b.py文件

01
02
03
04
----------------
i am just print
----------------
i am b.py main

 

首先说明下的是import a其实就是把a.py文件执行一次,区别就是当a.py作为导入的文件时,则a.py文件里的这个判断就是假的“__name__ == ‘__main__’”。

 

2.再来说说python -m和python的区别

看看官方怎么说
python –help
-m mod : run library module as a script (terminates option list)
先不解释这是啥意思,看例子,还是用之前的a.py文件

python a.py   #执行a.py文件

01
02
i am just print
i am a.py main

 

python -m a   #以模块的方式执行a.py文件

01
02
i am just print
i am a.py main

没啥区别,唯一区别是python -m后面的a.py要把后缀名.py去掉

继续来看
python

01
02
03
04
>>>
import 
sys
>>> print(sys.path)
[
''
,
'/usr/lib64/python26.zip'
,
'/usr/lib64/python2.6'
,
'/usr/lib64/python2.6/plat-linux2'
,
'/usr/lib64/python2.6/lib-tk'
,
'/usr/lib64/python2.6/lib-old'
,
'/usr/lib64/python2.6/lib-dynload'
,
'/usr/lib64/python2.6/site-packages'
,
'/usr/lib64/python2.6/site-packages/gtk-2.0'
,
'/usr/lib/python2.6/site-packages'
,
'/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'
]
>>>
exit
()

上面列举出了python找模块的路径

我将a.py文件从当前目录移到任何一个sys.path的列表中,打个比方,我就放在/usr/lib64/python2.6这下面
mv a.py /usr/lib64/python2.6

然后执行python —m a

01
02
i am just print
i am a.py main

 

执行python /usr/lib64/python2.6/a.py

01
02
i am just print
i am a.py main

这两个又一样了,呵呵

结论:
当我们知道一个模块的名字,但不知道它的路径时,使用python -m module_name
如果我们知道模块的完整路径(此处假设为”/path/to/module.py”),使用python /path/to/module.py
这两者等价
,现在知道-m的作用了吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156005.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TFRecord简介,原理分析,代码实现?[通俗易懂]

    TFRecord简介,原理分析,代码实现?在利用深度学习算法搭建完成网络之后,我们要对网络进行训练,要训练网络就要有训练数据,通常我们会直接对硬盘上存放数据进行操作,来fetch到网络中。这样直接从硬盘上读取数据太慢了,为了加快数据读取,今天我们介绍一种比较好的数据格式tfrecord,那么什么是tfrecord呢?什么TFRecord格式的数据?Tensorfl…

    2022年4月18日
    54
  • Gradle教程–基础篇

    Gradle教程–基础篇Gradle是什么Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。安装Gradle在AndroidStudio中新建项目成功后会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的Gradle到什么地方呢,或者说Gradle的本

    2022年6月28日
    34
  • webstorm永久激活码_最新在线免费激活

    (webstorm永久激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlbnNlSWQiOi…

    2022年3月26日
    107
  • 数字信号处理–语音信号处理

    数字信号处理–语音信号处理在Matlab平台上语音信号处理

    2022年5月9日
    105
  • springboot原理详解_Spring Boot

    springboot原理详解_Spring Boot本文以源码分析和原理图解的形式,穿插讲解了各类设计模式和封装思想,详细解析了SpringBoot2框架中的基本功能,包括SpringBoot的框架整合功能及其内SpringMVC的核心功能。框架架构师体验卡——Get!√√√

    2022年9月26日
    6
  • 会计初级学习笔记

    会计初级学习笔记

    2021年6月30日
    87

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号