2024-02-13 21:20:27 | 我爱编程网
为什么Python没有main函数?
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 -mhttp.server 8000”),可能是因为该项目中有main.py文件,在软件包中作为“文件”来执行。
总而言之,Python作为脚本语言不同于编译语言。无论是单个模块 (即.py文件) ,还是由多个模块组成的软件包,Python都可以选择一种灵活的执行方法,这完全不像其他语言那样必须定义入
1o有人可能会感到困惑,因为他们经常看到或编写以下代码:
为什么强制 main 函数作为入口这不就是Python的main函数吗?相信很多人都这么认为!
不,并不是
除了函数名是 main 之外,这段代码与我们前面介绍的 main函数没有半点关系,这个函数既不是必须的,也不能确定程序的执行顺序。即便没有上面这样的main函数,也不会有任何的语法问题。人们想编写一个main函数的主要原因其实是为了强调这是一个主函数,希望人为地将其设置成第-个执行的函数。
他们可能认为这个名字的函数更容易记住他们之所以要编写__name_=='main',可能是因为想表明main()只在直接执行当前脚本时才运行,而在将其导入到其他模块时不要运行。
但是,我个人不推荐这种写法。举一个简单的例子,假设只有几十行代码,或者-个脚本文件实现了一个简单的功能 (一个爬虫,或画一只乌龟,等等),但都是按照前面的方式编写的。
不推荐ifname=='main的写法,因为:首先,如果只有一个文件的话,那么这个文件不可能被导出。
其次,如果有多个文件,强烈建议不要将这个语句写在入口文件 (main.py) 中。从理论上讲,它的内容不应该导出供其他模块使用,因为它是起点。
最后,在多个文件的情况下,也不建议在非入口的文件中写入这条语句,因为这条语句能做的最多也就是编写一些测试代码。即便如此测试代码也应分开写到专用目录或文件中。
为什么强制 main 函数作为入口
但是,我个人不推荐这种写法。举一个简单的例子,假设只有几十行代码,或者-个脚本文件实现了一个简单的功能 (一个爬虫,或画一只乌龟,等等),但都是按照前面的方式编写的。
不推荐ifname=='main 的写法,因为:首先,如果只有一个文件的话,那么这个文件不可能被导出。
其次,如果有多个文件,强烈建议不要将这个语句写在入口文件(main.py)中。从理论上讲,它的内容不应该导出供其他模块使用,因为它是起点。
最后,在多个文件的情况下,也不建议在非入口的文件中写入这条语句,因为这条语句能做的最多也就是编写一些测试代码。即便如此,测试代码也应分开写到专用目录或文件中
def main是Python语言中的一种函数定义方式,用于表示程序的入口点。
1.def main的作用
def main函数用于在Python脚本中定义一个入口点,从而使脚本能够被其他模块调用和执行。在函数内部,可以编写执行程序所需的代码。直接运行脚本时,def main()函数会被自动调用。我爱编程网
2.标准使用方法
其中,第一行是用于指定解释器的路径;第二行是用于指定脚本编码格式。def main()函数用于编写程序逻辑,最后一行“if__name__=='__main__':”则是判断当前脚本是否被直接执行。
3.定义多个函数的情况
在一个Python脚本中,可以定义多个函数,但只有一个函数能够被作为入口点。此时,需要在main()函数内部调用其他函数来完成其他任务,避免混淆代码逻辑。
4.动态导入模块的情况
当一个脚本需要被多个程序引用时,可以通过import语句来导入该脚本。这时,需要将def main()函数的代码封装在if__name__==__main__':语句块内部,以保证这段代码只有在脚本被直接执行时才会被执行。
5.使用argparse模块解析命令行参数
如果需要在Python脚本中解析命令行参数,则可以使用argparse模块来实现。通过argparse.parse_args()函数可以将命令行参数解析成指定格式或变量,并可作为参数传递给def main()函数。
6.tips
在Python中,函数不一定都需要定义为def main()。可以将一些公共方法提取出来,形成一个python模块文件。其余脚本文件中,则可以利用import引入该模块,来使用一些已经被定义好的方法。
我爱编程网(https://www.52biancheng.com)小编还为大家带来怎样理解python中的函数,用户自定义函数有什么意义?的相关内容。
函数是什么?
定义:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
作用:
函数能提高应用的模块性和代码的重复利用率。
你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
函数是 python 的一等公民,函数也是对象。
使用函数有两个步骤:
1、定义函数 def 函数名(): 函数体
2、调用函数 函数名()
用php编写一个函数,使用字符串处理函数获得文件的扩展名,如使输入ab.jpg,输出jpgfunctioncutname($fname){$try=0;do{$try=strpos($fname,'.',$try+1);if($try!==false)$pos=$try;}while($try!==false);returnisset($pos)?substr($
publicstaticvoidmain(String[]args){...}在每个JAVA里面为什么一定需要这段代码?publicstaticvoidmain(String[]args)为java程序的入口方法,jvm在运行程序时,会首先查找main()方法。其中public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明是静态方法,及方法中的代码是存储在静态存储
看别人php程序的时候,每个页面开头都会有这段代码,为什么要define定义一下,这段代码的意思又是什么呢?define('ROOT_PATH',dirname(__FILE__));定义一个常量ROOT_PATH值取当前路径的目录名,,比如你的这个php文件是在D:/www/oursys/put.php,,,,取dirname(__FILE__)的值就是D:/www/oursys相
%取余的操作对象只能是整形,那10.7%3是不是不能算呀在少部分编译器和特殊编译配置下,10.7%3会被强制转换为整数后做取余数运算,相当于:(int)10.7%3得到整数结果。大部分编译器会直接报错,%不能对浮点数运算。如果你希望得到小数结果,只能自己做一个函数或语句段来完成:double a=10.7,b=3;while(a>=b) a -= b
python为什么对缩进有严格要求?Python对缩进有严格要求,主要是因为它使用缩进来表示代码块。在Python中,一个缩进级别通常为4个空格。这种约定使得代码更加易读和整洁。以下是一些原因:1.可读性:通过对代码进行适当的缩进,可以清晰地显示代码的结构,使其他开发者更容易理解代码的功能和逻辑。2.一致性:严格的缩进规则确保了在整个项目中,代码的格式和结构保持一致,这有助于
为什么青少年一定要学PythonPython简单易学、免费开源、高层语言、可移植性超强、可扩展性、面向对象、可嵌入型、丰富的库、规范的代码等。Python除了极少的涉及不到的开发之外,其他基本上可以说全能:系统运维、图形处理、数学处理、文本处理、数据库编程、网络编程、web编程、多媒体应用、pymo引擎、爬虫编写、机器学习、人工智能等等。Python的应用特别广,中国现在的人才缺口超过100
PhpOffice/PhpSpreadsheet读取和写入Excel读取Excel文件,并将数据读取成数组$spreadsheet=\PhpOffice\PhpSpreadsheet\IOFactory::load($file['tmp_file']);//指定第一个工作表为当前$data=$spreadsheet->getSheet(0)->toArray();PhpSpr
2025-02-01 20:24:39
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00