首页 > 编程语言 > 详细

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

时间:2019-05-24 17:41:31      阅读:323      评论:0      收藏:0      [点我收藏+]

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


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

# coding: utf-8
print("i am just print")
     
if __name__ == ‘__main__‘:
    print("i am a.py main")

   
vi b.py   

# coding: utf-8
print("----------------")
import a
print("----------------")
if __name__ == ‘__main__‘:
    print("i am b.py main")


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

i am just print
i am a.py main


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

----------------
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文件

i am just print
i am a.py main


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

i am just print
i am a.py main


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

继续来看
python

>>> 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

i am just print
i am a.py main


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

i am just print
i am a.py main


这两个又一样了,呵呵

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

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

原文:https://www.cnblogs.com/ddzj01/p/10919210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!