相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。

殊不知这段代码的意义并不是一定要存在于执行代码中,而是在日常工作中,为了调试某个模块的正确性,我们往往会在当前模块下直接写一个 if __name__ == '__main__',测试逻辑写在下面,这样,在其他模块调用这个模块里的方法也好,类也好的时候,就不会去调用 if __name__ == '__main__' 下面的逻辑了。

原因很简单,因为 if __name__ == '__main__' 中的 __name__ 代表的就是当前执行的模块名。

python一切皆对象,所以python的模块也是对象,他有一个 built-in module,叫 __name__,存储着模块是如何被执行的,如果是执行当前模块,那么就显示 __main__ ,如果是被引用进来的,就显示被引用的路径。

好了,解释完了这个奇妙的 __name__ 后,我们就来看下如何在其他模块中调用这个 __main__ 呢?

首先来看下我们待被执行的代码:

import sys

def main(args):

print(args)

if __name__ == '__main__':

print("执行如下代码 __name__ == '__main__'")

# 参数随便指定即可

main(sys.argv[1:])

我们来执行看下结果:

接下来我们来使用 subprocess 模块来从其他模块中调用 __main__

import subprocess

process = subprocess.run(

['python', 'app.py', 'miracle'],

stdin=subprocess.PIPE, stdout=subprocess.PIPE

)

print(process.stdout)

调用结果

使用 subprocess 的「优点」就是因为其实是通过创建一个子进程来执行的程序,所以不受子程序的影响,不会出现程序抛异常或主动退出进程导致主程序也退出的尴尬问题。 「缺点」就是需要创建子进程,相对来说资源消耗比较大。

subprocess 详细的用法详见这里不多做介绍,有兴趣的可以自行翻阅manual。

接下来我们使用 runpy 模块来调用看看

import runpy

runpy.run_path('app.py', run_name='__main__')

调用结果

使用 runpy 的优点就是不需要创建子进程,相对来说资源消耗比较小。 缺点就是主程序会受待执行程序的影响,会出现待执行程序中抛异常或主动退出会导致主程序也退出的尴尬问题。

runpy 详细的用法详见这里不多做介绍,有兴趣的可以自行翻阅manual。

这两种方法就是比较常用的在一个模块中执行另一个模块的 if __name__ == '__main__' 的方法。

总结来说就是,一个是在子进程中执行代码,一个是在当前进程中执行代码。

好啦,今天的内容就到这了,感兴趣的你,可以试试能不能走出来~

注公众号「Python专栏」,后台回复「mainmodule」,获取本文全套源码!

python判断汉字偏胖_写了2年python,知道 if __name__ == '__main__' 什么意思吗?相关推荐

  1. python判断汉字偏胖_python实现在线分词

    写在前面 最近在优化网站的搜索部分,网站是用Django实现的,主要业务是在线视频教育网站,之前搜索只是一段Django ORM模型中的icontains模糊匹配,所以只能搜索关键字,但是CEO(SB ...

  2. python判断汉字偏胖_OCR 汉字识别学习笔记2019-01-02

    一.git上star比较多的项目 *好 10.psenet的实现,最新的,pytorch: whai362/PSENet 14. kuangshi research in text detection ...

  3. 用python判断身份证号性别_验证身份证号的Python脚本

    引用 a[0], a[1], a[2], a[3], ..., a[16], a[17] 其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10 每一 ...

  4. python将汉字转为拼音字母_实用小技巧,Python一秒将汉字转为拼音

    大家好,欢迎来到Crossin的编程教室! 有时在处理文件时候,我们需要将中文汉字转换为拼音或者拼音首字母的需求:还有的时候,我们需要对汉字进行按拼音字母排序(汉字的默认排序是编码序而非拼音序).针对 ...

  5. python判断邮件发送成功_【基本解决】python中用SMTP发送QQ邮件提示成功但是收件人收不到邮件...

    折腾: 期间, 已经用了smtp的ssl去发送邮件了,但是结果: 第二收件人也没有收到邮件... 那去把端口号从465改为587: smtpPort=587, 结果直接出错: smtpObj = sm ...

  6. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  7. python判断汉字个数_python判断列表里数量python中文乱码问题大总结

    在运行这样类似的代码:#!/usr/bin/env python s="中文" print s 最近经常遇到这样的问题: 问题一:SyntaxError: Non-ASCII ch ...

  8. python判断题题库_《Python程序设计》判断题1-240题

    1.Python是一种跨平台.开源.免费的高级动态编程语言.(对) 2.Python 3.x完全兼容Python 2.x.(错) 3.Python 3.x和Python 2.x唯一的区别就是:prin ...

  9. 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐

    简单的爬虫入门实战 最近刚学了python的爬虫,刚好可以用来爬取漂亮的图片作为壁纸,网上美图网站有很多,比如:花瓣,堆糖.它们请求图片数据的方式差不多类似,都是通过用户不断下滑加载新的图片,这种请求 ...

  10. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

最新文章

  1. angularjs里对JS的lowercase和uppercase的完善
  2. TortoiseSVN status cache占用CPU高
  3. MyBatis的高级映射之多对一
  4. Fragment之一:Fragment入门
  5. 用虚拟网卡(softether)共享局域网资源
  6. Java NIO---1
  7. 数据结构之栈与递归的应用(汉诺塔递归解法)
  8. java获取资源文件的各种方法
  9. Redis 2.8.9源码 - Redis中的字符串实现 sds
  10. 深入理解Java Proxy机制
  11. 1371. 每个元音包含偶数次的最长子字符串
  12. Netty游戏服务器二
  13. 谷歌升级街景采集车,用AI获取更佳图像
  14. 多任务学习Multi-task Learning(MTL)概述
  15. 《2022中国PaaS市场研究及选型评估报告》正式发布
  16. 处理团队人际关系的九大原则
  17. centos 7 开启80,443端口
  18. Linux motd详解
  19. zke电池测试 软件,EBC-X系列电池测试仪使用说明.pdf
  20. 新学:DES加密 小知识点(S盒,初始置换)

热门文章

  1. 对话(Dialog)
  2. 面试题算法题 URL化and重新排列字符
  3. hadoop streaming 按字段排序与输出分割详解
  4. 网络编程----观察进程的启动与停止
  5. ASP.NET---母板应用
  6. 51nod1057-大数阶乘
  7. 递推算法之平面分割问题总结
  8. 汉诺塔问题(三柱及四柱)详解
  9. opencv 指定分辨率_使用opencv拉伸图像扩大分辨率示例
  10. android toast防重_Android-Android中如何防止Toast重复弹出相同的信息?