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' 。

相关推荐
豌豆花下猫9 分钟前
Python 潮流周刊#71:PyPI 应该摆脱掉它的赞助依赖(摘要)
后端·python·ai
Tech Synapse18 分钟前
Vscode 远程切换Python虚拟环境
ide·vscode·python
颜问儿1 小时前
【python】横截面数据分析及可视化报告示例
python·信息可视化·数据分析
Strengthen_沈1 小时前
简单分享下Python的if
开发语言·python
"Return"1 小时前
美团2024年秋招第一场笔试算法题题解【技术】
java·c++·python·算法
姚杰献2 小时前
Mac电脑上最简单安装Python的方式
开发语言·python·macos·机器学习
luthane2 小时前
python 实现harmonic series调和级数算法
开发语言·python·算法
qq_273900232 小时前
python划分CSV格式的数据集
python·生物信息学
钱彬 (Qian Bin)3 小时前
使用Python和OpenCV生成灰阶图像
开发语言·python·opencv·灰阶图·打印测试