大家好,又见面了,我是你们的朋友全栈君。
转自牛人: 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账号...