1. 简单百科
  2. Python

Python

Python是由吉多·范罗苏姆荷兰语:Guido van Rossum)于1989年末开发的一种编程语言,于1991年2月首次发布。 Python是一种免费的、可移植的、可解释的、面向对象的编程语言,它同时具有解释语言和脚本语言功能。 Python简洁的语法和动态类型,加上其解释性,使其被应用于许多领域的脚本编写和快速应用程序开发。

1989年末,吉多·范罗苏姆在荷兰国家数学与计算机科学研究中心(荷兰语:Centrum Wiskunde \u0026 Informatica,CWI)开始研究Python。1995 年,吉多·范罗苏姆在国家创新研究公司(英语:Corporation for National Research Initiatives,CNR)继续研发 Python ,并发布了该软件的多个版本。2000年6月,包括吉多·范罗苏姆在内的Python开发团队组建了PythonLabs团队,同年10月,PythonLabs团队加入Digital Creations。 2000年10月16日,Python 2.0发布。 2001 年,Python软件基金会成立。2008年12月3日,Python 3.0发布。 2023年6月6日,Python 3.11.4发布。

Python具有代码简洁、易读、易维护等特点,拥有高效的高级数据结构、丰富的基础类库和成熟的第三方类库。Python易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新函数和数据类型。Python还是一种支持字节编译的解释语言,并且Python的字节码是独立于机器的,可以在不同的硬件和软件平台上执行,而无需再次编译。 Python的特性使其拥有大批使用者,成为最流行的开源编程语言之一。截至2023年8月,Python位列TIOBE编程社区指数中最受欢迎的编程语言之首。

发展历程

Python的创始人吉多·范罗苏姆在荷兰国家数学与计算机科学研究中心工作时,经常使用ABC语言,他认为该语言有较多优点但存在缺乏扩展性的问题。吉多·范罗苏姆参与的有关Amoeba分布式操作系统的项目需要一种比编写C程序或Bourneshell脚本更好的方法来进行系统管理。在此项工作过程中,他意识到异常处理功能作为编程语言功能的重要性,并想到一种语法像ABC并可以访问调用Amoeba系统的脚本语言就能满足项目需求。因此,1989年末,吉多·范罗苏姆在阿姆斯特丹的研究中心开始研究Python。Python得名于20世纪70年代的英国电视喜剧连续剧《巨蟒剧团之飞翔的马戏团》(英语:Monty Python's Flying Circus),据说,Python的创始人在开发语言的同时,正在观看节目重播。1991年2月,Python 0.9在USENET首次发布。 Python最初是为执行一般管理任务而设计的,但因其被设计的较为通用,逐渐被应用于多个领域,拥有大批使用者,并于1994年创建了一个专门的互联网新闻组comp.lang.python。

1995 年,吉多·范罗苏姆弗吉尼亚的国家创新研究公司继续研发Python ,并发布了该软件的多个版本。1999年4月,Python 1.5.2发布。2000年6月,包括吉多·范罗苏姆在内的Python开发团队转移到BeOpen.com,并组建了PythonLabs团队,同年10月,PythonLabs团队离开Beopen,并加入Digital Creations。 2000年10月16日,Python 2.0发布,与早期版本的Python相比具有包容性的语言开发过程,还包含了更多的编程功能,如修复垃圾回收机制问题、增加Unicode编码标准支持以及列表理解。2001 年,Python软件基金会成立,这是一个专为拥有Python相关知识产权而创建的非营利组织。2008年12月3日,Python 3.0发布,不完全兼容Python 2,其开发的重点是清理代码库并消除冗余,Python 3.0的主要修改包括将打印语句转换为内置函数,改进整数的划分方式以及提供更多的Unicode支持。2010年7月3日,Python 2.7发布,并计划作为2.x版本中的最后一个版本,旨在通过提供兼容性,让Python2.x用户更容易将功能移植到Python3。

2023年8月24日,Python 3.11.5发布。 截至2023年8月,Python位列TIOBE编程社区指数中最受欢迎的编程语言之首。

概述

Python源于脚本语言ABC,支持面向对象编程之外的多种编程范式是一种免费的、可移植的、可解释的、面向对象的编程语言,其设计的理念是:对于特定的问题,只要有一种最好的方法来解决就够了,因此与其他语言相比Python语法较为简洁。用户可以从Python官网免费获取Python解释器和标准库的源代码或二进制形式。

Python是用可移植的ANSI C编写的,这意味着可以在WindowsLinux麦金塔等不同环境中编写、测试和上传Python代码,即Python具备可移植特性。

Python是一种支持字节编译的解释语言。Python程序由在交互模式下运行的Python解释器交互运行、调试和测试。Python的源代码是在解释器上加载时直接进行字节编译的,也可以显式进行字节编译。并且Python的字节码是独立于机器的,可以在不同的硬件和软件平台上执行,而无需再次编译。

Python是一种面向对象的语言,并提供了其他结构化和过程化语言的特性。Python允许面向对象的多重继承,还支持多态性,即Python可调用对象可以接受可选参数、关键字参数或无限数量的参数。

Python代码简洁易读,是因为其具有简单的语法与语义和相对较少的关键字,使用缩进而不是额外的符号将语句分组以形成代码块。

除上述特点外,Python还是可扩展的,它有许多系统调用和库的接口,也有各种窗口系统的接口,并且可以用C或C++进行扩展。它也可用作需要可编程接口的应用程序的扩展语言。 他还包含一个内置的模块导入系统,允许导入其他脚本和模块以供使用。

语法语义

行结构

逻辑行与物理行

Python程序可以拆分为多个逻辑行。一个逻辑行是由一个或多个物理行组成的,它的结束是以NEWLINE形符表示的。

物理行是一序列字符,由行尾序列终止。两个及两个以上的物理行可用反斜杠拼接为一个逻辑行。

圆括号、方括号、花括号内的表达式与三引号字符串可以分成多个物理行,隐式拼接行之间没有NEWLINE形符,后续行的缩进不影响代码运行,且可以存在空的后续行。

注释与声明

注释是用来说明程序代码或是提供其他信息的描述文字。Python的单行注释以井号 (#) 开头,并在物理行的末尾结束;多行注释是以三个引号来引住注释文字。注释在语法分析中会被忽略。

Python脚本第一或第二行的注释匹配正则表达式 coding[=:]\s*([-\w.]+) 时,该注释会被当作编码声明;这个表达式的第一组指定了源码文件的编码。编码声明必须独占一行,在第二行时,则第一行必须也是注释。没有编码声明时,默认编码为UTF-8。如果声明了编码格式,该编码格式的名称必须是Python可识别的。 编码格式会被用于所有的词法分析,包括字符串字面值、注释和标识符等。

缩进

缩进是逻辑行开头的空白符(空格符和制表符),用于计算该行的层级,决定语句组块。首个非空字符前的空格数决定了该行的缩进层次。缩进不能用反斜杠进行多行拼接。

Python程序代码中的缩进对执行结果有很大的影响,即Python对缩进是非常严谨的。同一个组块的程序代码必须使用相同的空格或制表符进行缩进,否则就会出现错误。

形符

Python形符有NEWLINE、INDENT、DEDENT、标识符、关键字、字面值、运算符 、分隔符等。 空白符(行终止符除外)不是形符。NEWLINE形符表示结束逻辑行;连续行的缩进层级以堆栈形式生成INDENT和DEDENT形符。

标识符与关键字

Python标识符的句法基于Unicode标准附件UAX-31,并进行了一定的细化与修改。在Python 2.x中,ASCII范围内(U+0001..U+007F)的有效标识符字符为:大小写字母A至Z、下划线 _ 、数字0至 9,但不能以数字开头;而Python 3.0引入了ASCII之外的更多字符,这些字符的分类使用unicodedata模块中的Unicode字符数据库版本。标识符的长度没有限制,但区分大小写。

关键字是Python中的特殊单词,不能用来进行命名操作。关键字表示将导人Python解释器中的命令。Pyhton 3.10新增软关键字,即仅在特定上下文下保留的某些标识符。

字面值

字面值是内置类型常量值的表示法。Python中的字面值有字符串字面值、字节串字面值、格式字符串字面值与数值字面值。

格式字符串字面值或称f-string是标注了 'f' 或 'F' 前缀的字符串字面值。这种字符串可包含替换字段,即以{}标注的表达式。其他字符串字面值只是常量,格式字符串字面值则是可在运行时求值的表达式。

数值字面值有三种类型:整数、浮点数虚数。数值字面值不含正负号,如-1等负数是由一元运算符 '-' 和字面值1合成的。

运算符

运算符是一些特殊标记(字符序列),在Python解释器中具有一定意义。使用它们意味着进行特定的操作,如加法、减法。

分隔符

标点符号(又名分隔符)用来分开不同的元素。有些分隔符来自于数学符号,另一些则来自于英语。

数据

对象是Python中对数据的抽象。Python程序中的所有数据都由对象或对象间关系来表示。每个对象都有各自的标识号、类型和值。对象的标识号是不变的,可将其理解为该对象在内存中的地址,'is' 运算符可以比较两个对象的标识号是否相同,id() 函数能返回一个代表标识号的整数;对象的类型决定该对象所支持的操作与可能的取值,对象的类型是不可变的,type() 函数能返回一个对象的类型 (类型本身也是对象);值可以改变的对象被称为可变对象,如字典和列表,值不可以改变的对象被称为不可变对象,如数字、字符串和元组。

Python的数据类型可分为数字型、序列、集合、映射。Python区分整型数、浮点型数和复数,其中整型数可细分为两种类型:整型,此类对象表示任意大小的数字,仅受限于可用的内存 (包括虚拟内存);布尔型,此类对象表示逻辑值False和True;浮点型,此类对象表示机器级的双精度浮点数;复数此类对象以一对机器级的双精度浮点数来表示复数值。序列表示以自然数作为索引的有限有序集,可分为不可变序列与可变序列,不可变序列类型的对象一旦创建就不能再改变;可变序列在被创建后仍可被改变,包括列表与字节数组。集合类型表示由不重复且不可变对象组成的无序且有限的集合,可通过内置的 set() 构造器创建。映射表示由任意索引集合所索引的对象的集合。

表达式

表达式是表达式元素的累积,如名称、属性访问、运算符或函数调用。

运算表达式

Python中的运算表达式有幂次运算、一元算术和位运算、二元算术和位运算、移位运算、比较运算、布尔运算。

赋值表达式

赋值表达式为Python 3.8新增功能,有时又被称为“命名表达式”或“海象表达式”,语法形式如下:

是将一个expression赋值给一个identifier,同时还会返回expression的值。

赋值表达式在被用作切片、条件表达式、lambda表达式、关键字参数和推导式中的if表达式以及在assert和with语句中的子表达式时必须用圆括号括起来。

条件表达式

条件表达式,有时称为“三元运算符”,在所有 Python 运算中具有最低的优先级。语法格式如下:

首先是对条件expression2求值。 如果expression2为真,expression1将被求值并返回其值;否则将对expression3求值并返回其值。

lambda表达式

lambda表达式,有时称为 lambda 构型,被用于创建匿名函数。 表达式lambda parameters: expression会产生一个函数对象 。该未命名对象的行为类似于用以下方式定义的函数:

通过lambda表达式创建的函数不能包含语句或标注。

表达式列表

表达式列表是一组表达式的组合。除了作为列表或集合显示的一部分,包含至少一个逗号的表达式列表将生成一个元组。 元组的长度就是列表中表达式的数量。 表达式将从左至右被求值。

表达式运算顺序

Python按从左至右的顺序对表达式求值。 但在对赋值操作求值时,右侧会先于左侧被求值。下表对Python中运算符的优先顺序进行了总结,从最高优先级(最先绑定)到最低优先级(最后绑定),相同单元格内的运算符具有相同优先级。

语句

简单语句

简单语句由一个单独的逻辑行构成。 多条简单语句可以存在于同一行内并以分号分隔。

表达式语句用于计算和写入值,或者调用一个过程。表达式语句会对指定的表达式列表或单一表达式进行求值。

赋值语句用于将名称(重)绑定到特定值,以及修改属性或可变对象的成员项。赋值是根据目标(列表)的格式递归地定义的。 当目标为一个可变对象(属性引用、抽取或切片)的组成部分时,该可变对象必须最终执行赋值并决定其有效性,如果赋值操作不可接受也可能引发异常。

增强赋值语句是在单个语句中将二元运算和赋值语句合为一体,对目标和表达式列表求值,对两个操作数相应类型的赋值执行指定的二元运算,并将结果赋值给原始目标。不同于普通赋值,增强赋值会在对右手边求值之前对左手边求值。

assert语句是在程序中插入调试性断言的简便方式。

pass语句是一个空操作,即当它被执行时,什么都不发生。 当语法上需要一条语句但并不需要执行任何代码时,可用它来临时占位。

return语句会离开当前函数调用,在语法上只会出现于函数定义所嵌套的代码,不会出现于类定义所嵌套的代码。如果提供了表达式列表,它将被求值,否则以 None 替代。

yield语句在语义上等同于 yield表达式。 yield 语句可用来省略在使用等效的yield表达式语句时所必须的圆括号。yield表达式和语句仅在定义generator函数时使用,并且仅被用于生成器函数的函数体内部。在函数定义中使用yield可使得该定义创建的是生成器函数而非普通函数。

raise语句被用来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。

break语句在语法上只会出现于for或while循环所嵌套的代码,但不会出现于该循环内部的函数或类定义所嵌套的代码。它会终结最近的外层循环,如果循环有可选的else子句,也会跳过该子句。如果一个for循环被break所终结,该循环的控制目标会保持其当前值。当break将控制流传出一个带有finally子句的try语句时,该finally子句会先被执行然后再真正离开该循环。

continue语句在语法上只会出现于for或while循环所嵌套的代码中,但不会出现于该循环内部的函数或类定义中。 它会继续执行最近的外层循环的下一个轮次。当continue将控制流传出一个带有finally子句的try语句时,该finally子句会先被执行然后再真正开始循环的下一个轮次。

import语句被用于导入模块。

global语句是作用于整个当前代码块的声明。 它意味着所列出的标识符将被解读为全局变量。 在global语句中列出的名称不得在同一代码块内该global语句之前的位置中使用。在global语句中列出的名称不能被定义为形式参数,也不能被作为with语句或except子句的目标,以及for循环的目标列表、class定义、函数定义、import语句或变量标注等等。

nonlocal语句会使得所列出的名称指向之前在最近的包含作用域中绑定的除全局变量以外的变量。这个语句允许被封装的代码重新绑定局部作用域以外且非全局(模块)作用域当中的变量。与 global语句中列出的名称不同,nonlocal语句中列出的名称必须指向之前存在于包含作用域之中的绑定。nonlocal语句中列出的名称不得与之前存在于局部作用域中的绑定相冲突。

复合语句

复合语句是包含其它语句(语句组)的语句,会以某种方式影响或控制所包含其它语句的执行。 通常,复合语句会跨越多行,但在某些简单形式下整个复合语句也可能包含于一行之内。一条复合语句由一个或多个子句组成, 一个子句则包含一个句头和一个句体。 特定复合语句的子句头都处于相同的缩进层级。 每个子句头以一个作为唯一标识的关键字开始并以一个冒号结束。 子句体是由一个子句控制的一组语句,可以是在子句头的冒号之后与其同处一行的一条或由分号分隔的多条简单语句,也可以是在其之后缩进的一行或多行语句。 只有后一种形式的子句体才能包含嵌套的复合语句。

if语句用于有条件的执行。它通过对表达式逐个求值直至找到一个真值,在子句体中选择唯一匹配的一个,然后执行该子句体,并且if语句的其他部分不会被执行或求值。

while语句用于在表达式保持为真的情况下重复地执行子句体,如果表达式值为假终止循环。

for语句用于对序列(例如字符串、元组或列表)或其他可迭代对象中的元素进行迭代。for循环会对目标列表中的变量进行赋值。 这将覆盖之前对这些变量的所有赋值,包括在for循环体中的赋值。

try语句可为一组语句指定异常处理句柄和/或清理代码。except子句指定一个或多个异常处理句柄。 当try子句中无异常发生时,将不会有任何异常处理句柄被执行。当try子句代码块中发生异常时,将启动对异常处理句柄的搜索。except* 子句被用来处理 ExceptionGroup,有多个except*子句可被执行,各自处理异常组的一部分。finally子句总是会被执行。

with语句用于包装带有使用上下文管理器定义的方法的代码块的执行。 上下文管理器是一个对象,它定义了在执行with语句时要建立的运行时上下文,并处理进入和退出所需运行时上下文以执行代码块。 上下文管理器的典型用法包括保存和恢复各种全局状态,锁定和解锁资源,关闭打开的文件等等。通常使用with语句,但是也可以通过直接调用它们的方法来使用。

match语句用于进行模式匹配,是Python 3.10新增功能。match语句接受一个变量或表达式,并将其值与作为一个或多个case块给出的连续模式进行比较,当满足某个case的条件时,就会执行该条件下的对应代码。

def语句用于定义函数,其定义的函数可以像用lambda表达式定义的函数一样被传递或赋值给其他名称,并且允许执行多条语句和使用标注。

class语句用于定义类。

函数

函数允许用户将一系列代码语句绑定到一个可以重复使用的表单中,将数据发送到一个函数后,可返回它对该数据所做操作的结果。

函数定义与调用

函数定义由关键字def开始。用户可通过函数定义来创建用户定义函数对象。语句块是构成函数对象进行计算的部分。函数定义是一条可执行语句,它执行时会在当前局部命名空间中将函数名称绑定到一个函数对象(函数可执行代码的包装器),这个函数对象包含对当前全局命名空间的引用,作为函数被调用时所使用的全局命名空间。 函数定义的格式如下:

调用是函数在程序中的应用,函数定义并不会执行函数体;只有当函数被调用时才会执行此操作。

函数中可能使用到的特殊关键字是return语。return表示从函数调用输出返回值。在执行return语句后函数结束。一个函数可能有多条return语句,执行的第一条return语句将结束函数。若函数没有return语句则不返回值,这种不返回值的函数通常称为过程。在这种情况下,默认返回None。

生成器函数

生成器函数是一个使用yield语句的函数或方法 。 这种函数在被调用时,总是返回一个可以执行该函数体的iterator对象:调用该迭代器的iterator.__next__() 方法将导致这个函数一直运行到它使用 yield 语句提供一个值。 当这个函数执行 return 语句或到达函数体末尾时,将引发StopIteration异常并且该迭代器将到达所返回的值集合的末尾。

协程函数

协程函数是使用async def来定义的函数或方法。这样的函数在被调用时会返回一个coroutine对象。它可能包含await表达式以及async with和async for语句。

异步生成器函数

异步生成器函数是使用async def来定义并使用yield语句的函数或方法。这样的函数在被调用时,将返回一个asynchronous iterator对象,该对象可在async for语句中被用来执行函数体。调用异步迭代器的aiterator.__anext__ 方法将返回一个awaitable,此对象会在被等待时执行直到使用yield产生一个值。 当函数执行到空的return语句或函数末尾时,将会引发 StopAsyncIteration 异常并且异步迭代器也将到达要产生的值集合的末尾。

内置函数

内置函数是对于C函数的外部封装,如 len() 和 math.sin()。内置函数参数的数量和类型由C函数决定。内置方法是内置函数的另一种形式,包含了一个传入C函数的对象作为隐式的额外参数,如alist.append(),其中alist为一个列表对象。

类提供了把数据和功能绑定在一起的方法。类是可调用对象,通常被用来创建自身实例,但也可以有重载 __new__() 的变体类型。 调用的参数会传递给 __new__(),通常也会传递给 __init__() 来初始化新的实例。任意类的实例可以通过在其所属类中定义 __call__() 方法变成可调用对象。 Python的类只使用了很少的新语法和语义。Python的类支持面向对象编程的所有标准特性:类的继承机制支持多个基类、派生的类能覆盖基类的方法、类的方法能调用基类中的同名方法。对象可包含任意数量和类型的数据。类支持Python动态特性:在运行时创建,创建后还可以修改。

类定义

与函数定义一样,类定义必须先执行才能生效,最简单的类定义形式如下:

类定义内的语句通常都是函数定义,但也可以是其他语句。类里的函数定义一般是特殊的参数列表,这是由方法调用的约定规范所指明的。

当进入类定义时,将创建一个新的命名空间,并将其用作局部作用域。因此,所有对局部变量的赋值都是在这个新命名空间之内。函数定义会绑定到这里的新函数名称。

类对象

类对象支持两种操作:属性引用和实例化。

属性引用使用Python中属性引用的标准语法: obj.name。 有效的属性名称是类对象被创建时存在于类命名空间中的名称。若定义了如下的MyClass的类,那么MyClass.n和MyClass.func就是有效的属性引用,分别返回一个整数和一个函数对象。

类的实例化使用函数表示法。 可以把类对象视为是返回该类的一个新实例的不带参数的函数。实例化操作("调用 "类对象)会创建一个空对象。许多类都希望创建的对象实例能定制为特定的初始状态。因此,类可能会定义一个名为 __init__() 的特殊方法。当一个类定义了 __init__() 方法时,类的实例化就会自动为新创建的类实例调用 __init__() 方法。__init__() 方法可以有参数,给类实例化操作符的参数会传递给 __init__() 方法。

继承

派生类定义的语法如下:

派生类定义的执行过程与基类相同。 当构造类对象时,基类会被记住。 此信息将被用来解析属性引用:如果请求的属性在类中找不到,搜索将转往基类中进行查找。 如果基类本身也派生自其他某个类,则此规则将被递归地应用。

派生类可能会重写其基类的方法。 因为方法在调用同一对象的其他方法时没有特殊权限,所以基类方法在尝试调用同一基类中定义的另一方法时,可能实际上调用是该基类的派生类中定义的方法。

Python有两个内置函数可被用于继承机制:使用 isinstance() 来检查一个实例的类型:isinstance(obj, int) 仅会在 obj.__class__ 为 int 或某个派生自int的类时为True;使用 issubclass() 来检查类的继承关系:issubclass(bool, int) 为True,因为bool是int的子类。 但是,issubclass(float, int)为False,因为float不是int的子类。

Python支持多重继承。 带有多个基类的类定义语句如下:

模块

模块是单独的Python脚本,包含一组类和函数。模块通过 import语句或者importlib.import_module() 和内置的 __import__() 等函数发起调用导入。 模块对象不包含用于初始化模块的代码对象。

当一个模块首次被导入时,Python会搜索该模块,如果找到就创建一个module对象并初始化它。 如果指定名称的模块未找到,则会引发ModuleNotFoundError。 当发起调用导入机制时,Python会实现多种策略来搜索指定名称的模块。

为了帮助组织模块并提供名称层次结构,Python引入了包的概念。所有包都是模块,但并非所有模块都是包。所有模块都有自己的名字。 子包名与其父包名会以点号分隔。Python 定义了两种类型的包,常规包和命名空间包。 常规包是传统的包类型,通常以一个包含 __init__.py 文件的目录形式实现,当一个常规包被导入时,这个 __init__.py 文件会隐式地被执行,它所定义的对象会被绑定到该包命名空间中的名称。命名空间包是由多个部分构成的,每个部分为父包增加一个子包,各个部分可能处于文件系统的不同位置,也可能处于 zip 文件中、网络上,或者 Python 在导入期间可以搜索的其他地方。命名空间包没有 parent/__init__.py 文件。

代码示例

复合语句示例

if语句

while语句

for语句

try语句

with语句

match语句

函数和类

开发环境

文本编辑器

大部分可以编辑纯文本的工具都可以用于编写Python代码,合适的编辑器可以有效减少代码编写时间,如表中所示编辑器均支持语法高亮显示,并且可以通过插件扩展到静态代码检查器(linters)和调试器。

解释器

Python是一种解释型语言,不需要编译和链接,可以节省大量开发时间。它的解释器实现了交互式操作,能试用各种语言功能,编写临时程序,或在自底向上的程序开发中测试功能。

集成开发环境

集成开发环境(英语:Integrated Development Environment,IDE)将进行Python开发所需的工具打包到一个用户友好的图形用户界面中,具有如构建自动化、代码校验、测试和调试等功能。

标准库

Python标准库包含一部分的数据类型,例如数字、序列、映射。这个库也包含了内置函数和异常,它们是不需要import 语句就可以在所有Python代码中使用的对象。此外,标准库主要是由一系列的模块组成,这些模块集可以不同方式分类。有些模块是用C编写并内置于Python解释器中;另一些模块则是用Python编写并以源码形式导入。有些模块提供专用于Python的接口;有些模块提供专用于特定操作系统的接口;另一些模块则提供针对特定应用领域的接口。有些模块在所有更新和移植版本的Python中可用;另一些模块仅在底层系统支持或要求时可用;还有些模块则仅当编译和安装Python时选择了特定配置选项时才可用。

应用

GUI

图形用户界面(GUI)是用户与软件交互图形界面。Python拥有一些GUI工具包,因此可以被应用于GUI工作。

Tkinter

Tkinter是Python标准库自带的GUI工具包。它提供了GUI应用所需要的几乎所有功能部件,如:按钮、文本、输入框、标签、复选框等,它的文本和画布小部件足够强大,可以实现网页、三维可视化和动画。因为它基于为脚本语言开发的库,Tkinter是一个相对轻量级的工具包,因此它与Python等脚本语言很好地结合在一起。Tkinter易学易用,支持多平台操作系统。

wxPython

wxPython是一个开源免费的Python GUI库,支持多种平台。它是基于C++ GUI库wxWidgets开发的,因此它比Tkinter更复杂,提供了数百个类,通常需要面向对象的编码风格。wxPython提供了比Tkinter更丰富小部件,如HTML查看器。

PyQt

PyQt是Qt工具包的Python接口,它是一个功能齐全的GUI库,目前可在Windows、Mac OS 、unixLinux上运行。与wxPython一样,PyQt通常比Tkinter更复杂,但功能更丰富:它包含数百个类以及数千个函数和方法。BlackAdder和Qt Designer系统为PyQt提供GUI构建程序。

数据分析

Python有用于数据分析的第三方库,其中常用的有numpypandasMatplotlib等。

NumPy

NumPy是Python科学计算的基础工具包。主要功能有:Ndarray,一个多维数组,提供了高效的存储效率和向量运算能力;可以快速对某个数据块进行某种运算,而无需取出单个元素进行操作;可对磁盘和内存文件进行操作;有标准的数学库函数功能。此外,Numpy提供了一个C API,因此很容易将数据传递给由低级语言编写的外部库,外部库也能以Numpy数组的形式将数据返回给Python。

Pandas

Pandas含有多种数据结构如DataFrame、Series等。Pandas是以numpy为基础构建的,因此以Numpy为中心的应用,如果使用Pandas进行实现,将变得简单高效。Pandas主要功能有:具备按轴自动或显式数据对齐功能的数据结构;集成时间序列功能;提供的数据结构既能处理时间序列也能处理非时间序列;数学运算和约简可以轴向执行;强大的缺失数据处理功能;合并常见数据库中的关系型运算;一些数据标准化和数据转换的功能等。

Matplotlib

Matplotlib是一个2D Python绘图库,该库可以绘制具有出版质量的、跨平台的、具有交互性的数据描述图。在数据分析中,可以使用Matplotlib呈现对数据的分析处理过程, 形象地展示数据分析的结果。

测试

Python标准库中包含单元测试模块,可以用来测试Python代码的质量和正确性。

unittest

unittest模块支持测试的自动化处理,可以共享代码测试的初始化和结束代码、将测试用例封装成一个测试套件以及测试的多元化显示。unittest模块支持单元测试的各种重要概念,其中最重要的概念是测试用例。unittest模块提供了TestCase基类,用来创建新的测试用例。在unittest模块中还有一个测试运行器,用来运行这些测试并为用户提供输出结果。unittest测试框架中使用TestRunner类来为测试的运行提供环境。

doctest

doctest模块可以利用代码注释中的文档内容,这种处理方式使得文档可以作为测试代码来执行。doctest作为一种测试框架,可以实现文档和代码的同步,并可以作为书写教程的一个工具。另外,可以将文档字符串变成可执行文档,从而完成对代码的测试。

Web开发

Web开发框架定义了一系列关于Web开发的处理方式和模板,使Web开发人员更加关注于应用的业务逻辑。在Python 语言中,有多种Web开发框架。

Zope

Zope是主要使用Python语言开发的开放源代码Web应用服务器,可以运行在包括 Linux、Windows 等多种系统平台上。其使用组件模式开发,可以很方便地加入所需的模块。它的主要功能包括多种数据库适配器、内置的Web服务器、多协议支持、索引和查找、内置安全模型和集群等。

TurboGears

TurboGears框架的目的是将现在各个层次中最优秀的组件组合起来,形成一个简单易用、对用户友好的框架。通过组合方式,使得Web开发者可以使用Python中各个层次被推荐的模块。用户也可以通过修改对部分组件进行替换。这种整合方式,使得TurboGears框架提供了Web开发从前端到后端的整合。

Django

Django是一个完整的快速Web开发框架。在Django框架中包含开发Web网络应用所需的组件,这些组件包括数据库的对象关系映射、动态内容管理的模板系统和富的管理界面。在 Django架中没有使用像TurboGears框架中那样的第三方Python 模块。在 Django框架中可以使用管理脚本文件manage.py、mob_Python或者FastCGI模块来构建简单的开发服务器。

图像处理

Python有第三方模块提供了图像处理功能。

PythonMagick

PythonMagick是一个ImageMagick软件包的Python绑定。ImageMagick是一款可以运行在多种系统平台下的用来创建、编辑和合成位图的软件库。使用ImageMagick图像处理套件可以转换、旋转缩放、裁剪图像,也可以对图像进行色彩处理等操作。除此之外,还可以在图像上实现一些特殊的效果包括在位图上写字和画上一些简单的图形。PythonMagick作为ImageMagick套件的Python语言绑定,实现了ImageMagick套件的功能。可以通过使用PythonMagick来实现对图形图像的处理,如裁剪等操作。

OpenCV

OpenCV(Open Source 计算机 Vision)库是一个用于计算机视觉处理方面的图像库。它关注于对图像进行高级处理的功能,包括人脸识别、动作识别和轨迹建模等。OpenCV库有Python语言的绑定,可以通过Python来访问OpenCV所提供的功能。

网络编程

Socket编程是实现网络应用程序的基础。Python标准库有socket模块,支持套接字接口。该模块中有生成套接字、等待连接、建立连接和传输数据的方法。

Python的Twisted框架适合编写服务器端的应用程序,提供了异步通信机制。Twisted 框架是由模块化的件组成的,这些模块化元素包括协议、工厂、反应器(reactor)和Deferred对象等。

游戏开发

Python中有绑定的游戏开发库可以辅助开发,如Pygame。PyGame是一个基于SDL(Simple Direct Media Layer,简易直控媒体层)的游戏开发环境,SDL是一个可以运行在多个系统平台下的非常成熟的图形和多媒体库。构建Pygame的两大基石Python和SDL都具有良好的跨平台性,因此Pygame也可以运行在多个系统平台下。通过使用Pygame库可以有效的处理用户的输入输出和控制多媒体资源。

参考资料

..2023-08-23

..2023-08-23

..2023-08-23

..2023-08-23

..2023-08-22

..2023-08-23

历史和许可证.python3.11.4文档.2023-08-23

Python 2.0 有什么新变化.python3.11.4文档.2023-08-23

更新日志.Python 3.11.5 文档.2023-09-04

TIOBE index.TIOBE.2023-08-23

General Python FAQ.Python 3.11.5 Documentation .2023-09-02

Python 2.0 有什么新变化.Python 3.11.5 文档.2023-09-04

Python 2.7 有什么新变化.Python 3.11.5 文档.2023-09-04

Status of Python Versions.Python Developer's Guide.2023-09-04

Python 3.0 有什么新变化.Python 3.11.5 文档.2023-09-04

Python 3.5 有什么新变化. Python 3.13.0a0 文档.2023-09-11

Python 3.6 有什么新变化. Python 3.13.0a0 文档.2023-09-11

Python 3.7 有什么新变化.Python 3.11.5 文档.2023-09-04

Python 3.10 有什么新变化.Python 3.11.5 文档.2023-09-04

Python 3.11 有什么新变化.Python 3.11.5 文档.2023-09-04

词法分析.Python3.11.4文档.2023-08-24

数据模型.Python 3.11.4文档.2023-08-24

表达式.Python 3.11.4文档.2023-08-24

简单语句.Python 3.11.4文档.2023-08-24

复合语句.Python 3.11.4文档.2023-08-24

数据模型.Python 3.11.5文档.2023-09-03

复合语句.Python 3.11.4文档.2023-08-24

内置函数.Python 3.11.4文档.2023-08-24

.Python 3.11.4文档.2023-08-24

导入系统.Python 3.11.4文档.2023-08-24

课前甜点.Python 3.11.5 文档.2023-09-11

概述.Python 3.11.5 文档.2023-09-11

..2023-08-23

EDU-SIG: Python in Education.Pyhton.2023-09-02

Python标准库.Python 3.11.4文档.2023-08-24

标准库简介.Python 3.11.5 文档.2023-09-05

标准库简介 —— 第二部分.Python 3.11.5 文档.2023-09-05