昨天2年python开发的同事,还在问我 if __name__ == '__main__' 是什么
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了昨天2年python开发的同事,还在问我 if __name__ == '__main__' 是什么,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2318字,纯文字阅读大概需要4分钟。
内容图文
![昨天2年python开发的同事,还在问我 if __name__ ==](/upload/InfoBanner/zyjiaocheng/829/0845659caacd46dc909718337774a593.jpg)
相信刚接触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的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节
点击:python技术分享交流
内容总结
以上是互联网集市为您收集整理的昨天2年python开发的同事,还在问我 if __name__ == '__main__' 是什么全部内容,希望文章能够帮你解决昨天2年python开发的同事,还在问我 if __name__ == '__main__' 是什么所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。