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的作用了吧。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Unity3D学习路线与学习经验分享[通俗易懂]

    Unity3D学习路线与学习经验分享[通俗易懂]Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接作者:15游02丁祺你好,这篇文档是我的导师孙老师(以下简称老孙)指名我书写给新手、初学者以及技能有些许缺陷的人的一篇经验分享的文档,当然如果你看到了这些文字,代表着你是一个有意愿或期望去学习这款软件的人。因人与人之间有很多的不同,以下我会尽我所能,通过不同切入点与角度,并根据以上人群的不同…

  • Jquery 插件库

    Jquery 插件库

  • labelme标注的数据分析[通俗易懂]

    labelme标注的数据分析[通俗易懂]参考:github地址:https://github.com/wkentaro/labelme安装安装方式:详情参考官网安装#Ubuntu14.04sudoapt-getinstallpython-qt4pyqt4-dev-toolssudopipinstalllabelme#python2works#Ubuntu16.04sudoapt-getinsta

  • Spring集成Hibernate 理解LocalSessionFactoryBean[通俗易懂]

    Spring集成Hibernate 理解LocalSessionFactoryBean[通俗易懂]随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。from:https://blog.csdn.net/leroy008/article/details/7704601LocalSessionFactoryBean(org.springframework.or…

  • excel宏编程 c语言,宏(巨集)

    excel宏编程 c语言,宏(巨集)宏(Macro,巨集),是一种批处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作…

  • mysql查询语句菜鸟教程_数据库的查询语句大全

    mysql查询语句菜鸟教程_数据库的查询语句大全常规查询查询所有字段:select*from表名;查询指定字段:select列1,列2,…from表名;使用as给字段起别名:select字段as名字….from表名;查询某个表的某个字段:select表名.字段….from表名;可以通过as给表起别名:select别名.字段….from表名as别名;消除重复行:…

发表回复

您的电子邮箱地址不会被公开。

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