python“__main__“的解读

Tutorial
Gross tutorial

有些模块包含了仅供脚本使用的代码,比如解析命令行参数或从标准输入获取数据。 如果这样的模块被从不同的模块中导入,例如为了单元测试,脚本代码也会无意中执行。

这就是 if name == 'main' 代码块的用武之地。除非模块在顶层环境中(python 模块所在文件名.py)被执行,否则该块内的代码不会运行。

将尽可能少的语句放在位于 if name == 'main' 之下的代码块中可以提高代码的清晰度和准确度。 通常,将由一个名为 main 的函数来封装程序的主要行为:

简单来说,aaa.py中,if __name__ == '__main__'中的代码只在python aaa.py才会执行,

如果仅仅在其他bbb.py中import aaa,其中的代码不会执行。

echo.py

py 复制代码
import shlex
import sys

def echo(phrase: str) -> None:
   """A dummy wrapper around print."""
   # for demonstration purposes, you can imagine that there is some
   # valuable and reusable logic inside this function
   print(phrase)

def main() -> int:
    """Echo the input arguments to standard output"""
    phrase = shlex.join(sys.argv)
    echo(phrase)
    return 0

if __name__ == '__main__':
    sys.exit(main())  # next section explains the use of sys.exit

请注意,如果模块没有将代码封装在 main 函数内,而是直接放在 if name == 'main' 块内,那么这个 phrase 变量对整个模块来说就是全局变量。 这很容易出错,因为模块内的其他函数可能会无意中使用全局变量而不是局部名称。 一个 main 函数解决了这个问题。

使用 main 函数有一个额外的好处,就是 echo 函数本身是孤立的,可以在其他地方导入。当 echo.py 被导入时,echo 和 main 函数将被定义,但它们都不会被调用,因为 name != 'main' 。

相关推荐
Java面试题总结12 小时前
Vue3流式调用大模型接口完整实践
后端·python
怪兽学LLM12 小时前
AI Agent 记忆系统设计:长短期记忆如何实现?什么时候存?什么时候查?
人工智能·python
DFT计算杂谈12 小时前
DeepSeek 集群服务器无root本地部署指南
数据库·人工智能·python·opencv·算法
卷无止境12 小时前
Python 跨平台 GUI 解决方案全景报告
前端·python
benchmark_cc21 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
Python+991 天前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
dunge20261 天前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
小白学大数据1 天前
两周完成爬虫技术栈升级:Scrapy 迁移 Crawlo 的路径与取舍
爬虫·python·scrapy
用户8356290780511 天前
使用 Python 在 Excel 中添加和自定义文本框
后端·python
总裁余(余登武)1 天前
python多个py文件打包【解决exe不能移动运行bug】
python