iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详细聊一聊为什么Python没有main函数
  • 242
分享到

详细聊一聊为什么Python没有main函数

Python 官方文档:入门教程 => 点击学习

摘要

目录前言为什么必须强制main函数作为入口?总结前言 众所周知,python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和

前言

众所周知,python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和“建议编写main函数”。

其实,可能他们是想模仿真正的main函数,但是许多人都被误导(或误解),然后编写了非常笨拙的代码。

在开始讨论之前,我们先来回答以下两个问题:

  • 所谓的“main函数”究竟是什么意思?
  • 为什么有些编程语言必须编写main函数?

一些编程语言将main函数作为程序的执行入口,比如C/C++C#、Java、Go、Rust等等,这个函数具有特定的含义:

  • main函数名是必须的,这意味着必须有一个主函数。
  • 最多只能有一个main函数,这意味着程序的入口是唯一的。
  • 语法格式有特定要求,书写形式也相对固定。

为什么必须强制main函数作为入口?

这些语言都是编译语言,需要将代码编译成可执行的二进制文件。为了让操作系统/引导程序找到程序的开头,需要定义这样一个函数。

简而言之,需要在大量可执行的代码中定义一个至关重要的的开头。

不难看出,对于这些语言来说,main函数是不可或缺的组成部分。

但是,当我们把目光转向Python时,就会发现情况大不相同。

  • Python是一种解释语言,即脚本语言。运行过程是从上到下,逐行进行的,这意味着它的起点是已知的。
  • 每个.py文件都是一个可执行文件,可作为整个程序的入口文件,意味着该程序的入口很灵活,而且无需遵循任何约定。
  • 有时运行Python项目时不需要有指定入口文件(命令行比较常见,例如“ python -m Http.server 8000”),可能是因为该项目中有main.py文件,在软件包中作为“文件”来执行。

总而言之,Python作为脚本语言不同于编译语言。无论是单个模块(即.py文件),还是由多个模块组成的软件包,Python都可以选择一种灵活的执行方法,这完全不像其他语言那样必须定义入口。

换句话说,Python不需要规定程序员必须在语法上定义一个统一的入口(无论是函数、类还是其他东西)。

有些学生可能会感到困惑,因为他们经常看到或编写以下代码:

# main file  
def main():      
    ……  
  
if __name__ == '__main__':      
    main()  

这不就是Python的main函数吗?相信很多人都这么认为!

不,并不是。

除了函数名是“main”之外,这段代码与我们前面介绍的main函数没有半点关系,这个函数既不是必须的,也不能确定程序的执行顺序。即便没有上面这样的main函数,也不会有任何的语法问题。

人们想编写一个main函数的主要原因其实是为了强调这是一个主函数,希望人为地将其设置成第一个执行的函数。

他们可能认为这个名字的函数更容易记住。

他们之所以要编写name ==‘main’,可能是因为想表明main()只在直接执行当前脚本时才运行,而在将其导入到其他模块时不要运行。

但是,我个人不推荐这种写法。

举一个简单的例子,假设只有几十行代码,或者一个脚本文件实现了一个简单的功能(一个爬虫,或画一只乌龟,等等),但都是按照前面的方式编写的。

不推荐if name == 'main’的写法,因为:

  • 首先,如果只有一个文件的话,那么这个文件不可能被导出。
  • 其次,如果有多个文件,强烈建议不要将这个语句写在入口文件(main.py)中。从理论上讲,它的内容不应该导出供其他模块使用,因为它是起点。
  • 最后,在多个文件的情况下,也不建议在非入口的文件中写入这条语句,因为这条语句能做的最多也就是编写一些测试代码。即便如此,测试代码也应分开写到专用目录或文件中。

每次看到这些笨拙的代码时,我都会感到不适。为什么要写这样的if语句?你压根不应该将这段代码包装成一个函数!

总结

  • 打破惯性思维,编写真实的代码。main函数是某些语言的唯一入口,但不应在Python中使用。你应该了解脚本语言的特征,并学习简单而优雅的风格。
  • 你可以使用main.py,而不是编写main函数。由于Python程序的执行单元是脚本文件,而不是函数或类,因此建议将入口文件命名为main.py,并根据需要决定内部的函数。
  • 将main.py作为入口文件。该文件可直接与命令行的“-m”参数结合使用。

到此这篇关于为什么Python没有main函数的文章就介绍到这了,更多相关Python没有main函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详细聊一聊为什么Python没有main函数

本文链接: https://www.lsjlt.com/news/200378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详细聊一聊为什么Python没有main函数
    目录前言为什么必须强制main函数作为入口?总结前言 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和...
    99+
    2023-03-19
    python没有main python没有main函数怎么运行 python没有主函数
  • 聊聊为什么Vue 3要使用setup()函数
    在Vue 2中,我们通常会使用选项式API来创建组件,即通过声明生命周期函数、数据、事件等来实现组件的功能。但是,Vue 3提供了一种新的API方式,称为函数式API,其中最关键的部分是setup()函数。setup()函数是Vue 3中的...
    99+
    2023-05-14
  • 聊聊PHP中require_once()函数为什么不好用
    在上一篇《聊聊PHP中die()和sleep()函数的用法》中给大家简单介绍了die()和sleep()函数的使用方法,感兴趣的朋友可以去学习了解一下~ 本文将告诉你PHP中requ...
    99+
    2024-04-02
  • 详细聊一聊js防抖节流到底是什么
    目录前言场景防抖核心解释修复场景例子节流核心解释修复场景例子总结前言 防抖和节流,这是前端防止用户频繁调用同一个接口的方法,比如短时间重复点击上传同一个文件,短时间重复点击提交同一个...
    99+
    2024-04-02
  • Python没有main函数的原因是什么
    为什么必须强制main函数作为入口?这些语言都是编译语言,需要将代码编译成可执行的二进制文件。为了让操作系统/引导程序找到程序的开头,需要定义这样一个函数。简而言之,需要在大量可执行的代码中定义一个至关重要的的开头。不难看出,对于这些语言来...
    99+
    2023-05-14
    Python main
  • Python中没有main函数的原因是什么
    Python中没有main函数的原因是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为什么必须强制执行主函数这些语言是已编译的语言,需要将代码编译到可执行的二进制文件中,以...
    99+
    2023-06-16
  • python中为什么没有dict函数
    python中是存在dict函数的,dict()函数的作用是用于创建一个字典。dict()函数语法:class dict(**kwarg)class dict(mapping, **kwarg)class&nb...
    99+
    2024-04-02
  • python中为什么没有cmp函数
    python中是存在cmp函数的,cmp()函数是用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。cmp()函数语法:cmp( x, y )cmp()函数使用方法:print "...
    99+
    2024-04-02
  • Python中为什么没有函数重载
    本篇内容主要讲解“Python中为什么没有函数重载”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中为什么没有函数重载”吧!题目:Python中为什么没有函数重载?点评:C++、Jav...
    99+
    2023-06-01
  • 聊聊vue生命周期钩子函数有哪些,分别什么时候触发
    目录vue生命周期钩子函数以下为详解版生命周期mounted和activated使用、踩坑 activatedmounted踩坑vue生命周期钩子函数 vue生命周期即为一...
    99+
    2024-04-02
  • 为什么golang中没有函数重载?
    go 语言中不允许函数重载,原因如下:简化编译器实现提高代码可读性避免名称冲突go 中可以使用可变参数列表或接口来实现类似函数重载的行为。 Go 中没有函数重载的原因 在 Go 语言中...
    99+
    2024-04-30
    golang 函数重载 代码可读性
  • 标准库中为什么没有math.Round函数?
    ...
    99+
    2024-04-02
  • 为什么Go没有计算整数绝对值的函数?
    编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《为什么Go没有计算整数绝对值的函...
    99+
    2024-04-04
  • 一文详解C++子类函数为什么不能重载父类函数
    先说结论: 子类成员函数的函数名和基类一样,但是函数声明与基类不一样的时候,不会和基类函数构成重载,而是会隐藏基类函数 简要回顾下C++中的基本概念: 重写(override): 基...
    99+
    2024-04-02
  • 为什么没有一个内置的closed函数用来检查通道是否已经关闭?
    这篇文章将为大家详细讲解有关为什么没有一个内置的closed函数用来检查通道是否已经关闭?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为什么没有内置的 closed() 函数来检查通道是否已关闭? Go...
    99+
    2024-04-02
  • 如果将没有值的列作为参数传递,MySQL SUM() 函数的输出是什么?
    当 MySQL SUM() 函数获取一个没有值的列作为参数时,它将返回 NULL,而不是 0 作为输出。该列可以是任何数据类型。按照以下示例,使用名为“social”的表,该表只有一列名为“id”且没有值的列,将对其进行说明示例mysql&...
    99+
    2023-10-22
  • Python IDE中的Path函数能做什么?看看这个详细的指南。
    Python是一种流行的编程语言,拥有众多的IDE和工具,其中Path函数是其中一个非常有用的函数。Path函数可以帮助你轻松地管理文件和目录,同时还提供了许多有用的工具和函数,使得文件和目录操作变得更加高效和方便。在这篇文章中,我们将深...
    99+
    2023-07-26
    ide path 函数
  • PHP 数组和 Git 有什么联系?一份详细教程来解答!
    在 PHP 开发中,数组是非常重要的数据类型之一。而 Git 则是现代软件开发中不可或缺的版本控制工具。虽然它们看起来毫不相干,但实际上它们之间有着一些联系。在本文中,我们将探讨 PHP 数组和 Git 之间的联系,并提供一份详细的教程来...
    99+
    2023-06-24
    数组 git 教程
  • 如何确保我的所有写事务函数都按顺序得到解决?另外,为什么 else 函数没有执行?
    学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《如何确保我的所有写事务函数都按顺序得到解决?另外,为什么 else 函数没有执行?》,以下内容主要包含等知识点,如果你正在学习或准备学习...
    99+
    2024-04-05
  • javascript一个表单被递交时触发此事件使用什么函数,详细讲解
    这篇文章将为大家详细讲解有关javascript一个表单被递交时触发此事件使用什么函数,详细讲解,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。表单提交事件处理函数: onSubmit 当表单被提交时触发此...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作