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)
上一篇 2022年7月5日 下午4:46
下一篇 2022年7月5日 下午4:46


相关推荐

  • pycharm 激活码2021年【在线破解激活】

    pycharm 激活码2021年【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    58
  • TkMybatis 笔记

    TkMybatis 笔记1 通用 TkMybatis 笔记 1 引入 1 1 作用替我们生成常用增删改查操作的 SQL 语句 1 2 代码官方发布地址 https gitee com freehttps gitee com free Mapper wikis 1 1 java parent 1 integration1 3 前置知识 MyBatisSprin 快速入门 2 1 创建测试数据 SQ

    2026年3月19日
    3
  • bootstrap之glyphicon字体图标

    bootstrap之glyphicon字体图标glyphicon 字体图标用途广泛 可以把它们应用到按钮 工具条中的按钮组 导航 输入框或下拉菜单等地方 例如 在做 SM 管理系统项目的时候 就可以在编辑 删除按钮中使用 glyphicon 字体图标 出于性能的考虑 所有图标都需要一个基类 glyphicon 和一个对应每个图标的类 glyphicon xxx 我们可直接到 Glyphicons 字体图标库中 将图标下面的两个类 copy 下来 放到标

    2026年3月19日
    1
  • spring cloud gateway 网关认证登录_golang 网关

    spring cloud gateway 网关认证登录_golang 网关网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务,所以,使用网关的好处在于:(1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发人员把精力专注于业务逻辑的实现。由网关统一实现服务路由(灰度与ABTest)、负载均衡、访问控制、流控熔断降级等非业务相关功能

    2022年10月11日
    5
  • 关键字declare_protected关键字

    关键字declare_protected关键字在写函数模板时,存在一个问题是不能总能知道应该在声明中使用那种类型。例如:templatevoidft(T1x,T2y){…?type?xpy=x+y;…}在以上的例子中,因为函数模板的存在,我们并不能知道变量xpy的类型。这时我们可以使用C++11新增的关键字decltypeintx;

    2025年10月10日
    4
  • 什么是跨域访问「建议收藏」

    什么是跨域访问「建议收藏」1.什么是跨域跨域是指跨域名的访问,以下情况都属于跨域:跨域原因说明示例域名不同www.jd.com与www.taobao.com域名相同,端口不同www.jd.com:8080与www.jd.com:8081二级域名不同item.jd.com与miaosha.jd.com如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www….

    2022年5月25日
    55

发表回复

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

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