暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

详解Python中的main函数

367

if name == ”__main__” 在 Python 中做什么?

长按关注《Python学研大本营》,加入读者群,分享更多精彩

何时以及如何在 Python 中执行 main 方法呢?

如果您是 Python 新手,您可能已经注意到可以在有或没有 main 方法的情况下运行 Python 脚本。并且 Python 中用于定义一个(即if name == ‘__main__')的符号绝对不是不言自明的,尤其是对于新手而言。

在今天的教程中,我们将探讨和讨论 main 方法的用途,以及在 Python 应用程序中定义该方法时的预期结果。

__name__的目的是什么?

在执行程序之前,Python 解释器将 python 模块的名称分配给一个名为__name__. 根据您是通过命令行执行程序还是将模块导入另一个模块,分配__name__将有所不同。

例如,如果您将模块作为脚本调用

python my_module.py

然后 Python Interpreter 会自动将字符串分配'main'给特殊变量__name__。另一方面,如果您的模块是在另一个模块中导入的

# Assume that this is another_module.py
import my_module

然后字符串'my_module'将被分配给__name__.

主要方法是如何工作的?

现在假设我们有以下模块,其中包含以下代码行:

# first_module.py
print('Hello from first_module.py')

if __name__ == '__main__':
    print('Hello from main method of first_module.py')

所以在上面的模块中,我们有一个在 main 方法之外的打印语句和一个在内部的打印语句。main 方法下的代码只有在模块作为脚本从(例如)命令行调用时才会执行,如下所示:

python first_module.py
Hello from first_module.py
Hello from main method of first_module.py

现在,假设我们不想将模块first_module作为脚本调用,而是想将其导入另一个模块:

# second_module.py
import first_module

print('Hello from second_module.py')

if __name__ == '__main__':
    print('Hello from main method of second_module.py')

最后,我们second_module作为脚本调用:

python second_module.py
Hello from first_module.py
Hello from second_module.py
Hello from main method of second_module.py

请注意,第一个输出来自模块first_module,特别是来自 main 方法之外的打印语句。由于我们没有first_module作为脚本调用,而是将其导入到second_modulefirst_module 的 main 方法中,因为if name == ‘__main__'计算结果为False. 回想一下,从上面的调用中,__name__变量 forsecond_module被分配了字符串'main',而first_module's__name__变量被分配了模块的名称,即’first_module’。

尽管下面的所有内容都if name == ‘__main__'被认为是我们所说的“main 方法”,但最好定义一个适当的 main 方法,如果条件评估为 True 则调用该方法。例如,

# my_module.py
def main():
    """The main function of my Python Application"""
    print('Hello World')

if __name__ == '__main__'
    main()

注意:我通常不鼓励您在单个 Python 应用程序中拥有多个主要功能。为了这个例子,我使用了两种不同的主要方法。

最后的想法

在本文中,我描述了 main 方法如何在 Python 中执行以及在什么条件下执行。当一个模块作为一个字符串被调用时,Python 解释器会将这个字符串分配'main'给一个名为 call 的特殊变量,随后将执行__name__在该条件下定义的代码。if name == ‘__main__'另一方面,当一个模块被导入到另一个模块中时,Python 解释器会将带有该模块名称的字符串分配给特殊变量__name__。这意味着在这种情况下if name == ‘__main__'将评估为False这意味着只有在这种情况之外的代码才会在导入后执行。

推荐书单

《PyTorch深度学习简明实战 》

本书针对深度学习及开源框架——PyTorch,采用简明的语言进行知识的讲解,注重实战。全书分为4篇,共19章。深度学习基础篇(第1章~第6章)包括PyTorch简介与安装、机器学习基础与线性回归、张量与数据类型、分类问题与多层感知器、多层感知器模型与模型训练、梯度下降法、反向传播算法与内置优化器。计算机视觉篇(第7章~第14章)包括计算机视觉与卷积神经网络、卷积入门实例、图像读取与模型保存、多分类问题与卷积模型的优化、迁移学习与数据增强、经典网络模型与特征提取、图像定位基础、图像语义分割。自然语言处理和序列篇(第15章~第17章)包括文本分类与词嵌入、循环神经网络与一维卷积神经网络、序列预测实例。生成对抗网络和目标检测篇(第18章~第19章)包括生成对抗网络、目标检测。

本书适合人工智能行业的软件工程师、对人工智能感兴趣的学生学习,同时也可作为深度学习的培训教程。

作者简介:

日月光华:网易云课堂资深讲师,经验丰富的数据科学家和深度学习算法工程师。擅长使用Python编程,编写爬虫并利用Python进行数据分析和可视化。对机器学习和深度学习有深入理解,熟悉常见的深度学习框架( PyTorch、TensorFlow)和模型,有丰富的深度学习、数据分析和爬虫等开发经验,著有畅销书《Python网络爬虫实例教程(视频讲解版)》。

购买链接(新书限时5.5折):https://item.jd.com/13528847.html

精彩回顾

《Pandas1.x实例精解》新书抢先看!

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

长按关注《Python学研大本营》
长按二维码,加入Python读者群


文章转载自Python学研大本营,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论