Python(编程语言)

Python
范例多范式面向对象程序性命令),功能结构化反射性
设计Guido Van Rossum
开发人员Python软件基金会
首先出现1991年2月20日
稳定版本
3.12.1 / 7 2023年12月7日
打字学科动态强烈的打字可选类型的注释(自3.5起,但这些提示被忽略了,除非使用非官方工具)
作业系统WindowsMacOSLinux/UnixAndroid以及其他一些平台
执照Python软件基金会许可证
文件名扩展.py,.pyw,.pyz,
.pyi,.pyc,.pyd
网站python.org
主要实施
cpythonpypy无固定pythonmicropythoncirvurepythonironpythonjython
方言
CythonRpythonStarlark
被影响
ABCAdaAlgol 68
aplcc ++cludylan
Haskell,Icon,Lisp,
模量3,perl,标准ML
受影响
Apache GroovyBooCobraCoffeescriptDF#GdscriptGenieGoJavaScriptJuliaMojoNim ,Nim, RingRubySwift ,Swift
  • Wikibooks的Python编程

Python是一种高级通用的编程语言。它的设计理念通过使用大量凹痕强调代码可读性

Python是动态键入垃圾收集的。它支持多个编程范式,包括结构化(尤其是程序),面向对象功能性编程。由于其全面的标准库,它通常被描述为“包括电池”的语言。

Guido van Rossum于1980年代后期开始担任ABC编程语言的继任者Python,并于1991年首次发布为Python 0.9.0。 Python 2.0于2000年发行。Python3.0于2008年发布,是一项主要的修订版,与早期版本不完全落后。 Python 2.7.18于2020年发行,是Python 2的最后发行版。

Python始终是最受欢迎的编程语言之一,并且在机器学习社区中广泛使用。

历史

Python的设计师Guido Van RossumOscon 2006

Python于1980年代后期由荷兰Centrum Wiskunde&Informatica (CWI)的Guido van Rossum构思为ABC编程语言的继任者,该语言的灵感来自SETL ,能够与Amoeba操作系统进行例外处理和交互。它的实施始于1989年12月。范·罗苏姆(Van Rossum)肩负着该项目的全部责任,作为首席开发商,直到2018年7月12日,他宣布自己的“永久性假期”,因为他的责任是Python的“生命的仁慈独裁者”,这是Python的标题社区赋予他反映他作为该项目首席决策者的长期承诺。 2019年1月,Active Python Core开发人员选举了一个由五人组成的指导委员会,以领导该项目。

Python 2.0于2000年10月16日发布,其中许多主要的新功能,例如列表综合循环检测垃圾收集,参考计数Unicode支持。 Python 3.0于2008年12月3日发布,其许多主要功能Python 2.6.x和2.7.x.发行。 Python 3的版本包括2to3实用程序,该实用程序将Python 2代码转换为Python 3。

Python 2.7的寿命最初定于2015年,然后推迟到2020为了它。目前仅支持3.8岁及以后(2023年的安全问题,例如3.7.17,最后的3.7.x版本)。

在2021年(在2022年再次两次),由于所有Python版本都不安全(包括2.7),因此加快了安全更新,因为安全问题导致可能远程代码执行Web-Cache中毒。由于许多安全问题,在2022年,Python 3.10.4和3.9.12加快了3.8.13。当Python 3.9.13于2022年5月发布时,宣布3.9系列(加入较旧的系列3.8和3.7)将来只会获得安全修复程序。 2022年9月7日,由於潜在的拒绝服务攻击:3.10.7、3.9.14、3.8.14和3.7.14。

截至2023年10月,Python 3.12是稳定的版本,而3.12和3.11是唯一具有活跃(与仅安全性)支持的版本。 3.11的显著变化包括提高程序执行速度和改进的错误报告。

Python 3.12添加了语法(实际上每个Python至少3.5以来都会添加一些语法),这是新的(软)关键字type(最近的发行版添加了很多打字支持,例如3.10中的新类型联合运营商),3.11用于例外处理,3.10matchcase(软)关键字,用于结构模式匹配语句。 Python 3.12还删除了过时的模块和功能,并且未来版本也将在开发部分中见下文。

Python 3.11声称比Python 3.10快10到60%,而Python 3.12在此之前又增加了5%。它还有改进的错误消息和许多其他更改。

自2023年6月27日以来,Python 3.8是Python最古老的支持版本(尽管在“安全支持”阶段),这是由于Python 3.7达到了寿命

设计理念和特征

Python是一种多范式编程语言面向对象的编程结构化编程得到了充分的支持,其许多功能支持功能编程和面向方面的编程(包括元编程元图)。许多其他范式都通过扩展名支持,包括通过合同逻辑编程设计。

Python使用动态键入参考计数和一个周期检测垃圾收集器的组合来进行内存管理。它使用动态名称分辨率较晚绑定),该分辨率在程序执行过程中绑定了方法和可变名称。

它的设计为LISP传统中的功能编程提供了一些支持。它有filter,mapreduce功能;列出综合词典,集合和生成器表达式。标准库有两个模块(itertoolsfunctools)实施从Haskell标准ML借用的功能工具。

它的核心理念在文件中总结了Python的禅宗PEP 20 ),其中包括

  • 美丽比丑陋更好。
  • 明确胜于隐式。
  • 简单胜于复杂。
  • 复杂胜于复杂。
  • 可读性计数。

Python并没有将其所有功能构建为核心,而是通过模块高度扩展。这种紧凑的模块化使其成为向现有应用程序添加可编程接口的一种手段。范·罗森(Van Rossum)对带有大型标准库的小型核心语言的愿景和易于扩展的解释器源于他对ABC的挫败感,ABC拥护相反的方法。

Python努力寻求更简单,杂乱的语法和语法,同时为开发人员提供了编码方法的选择。与Perl的“有多种方法可以做”座右铭,Python拥抱了一个座右铭。 Python Software Foundation研究员Alex Martelli和Python书籍作者写道:“将某些事物描述为'聪明'的事物被认为是Python文化中的一种称赞。”

Python的开发人员努力避免过早优化,并拒绝CPYTHON参考实施的非关键部分的补丁,这将以清晰的成本为速度提供边际提高。可以通过将速度关键函数移动到编写的语言(例如C等语言)或使用像PIPPY(PYPY)的时间编译器来提高执行速度。它也可以与其他语言进行交叉编译,但由于Python是一种非常有活力的语言,或者汇编了python的受限子集,并且可能是语义的,并且可能是语义可能是,并且可能是语义可能是,并且可能是语义是可能的,那么它可能无法提供预期的全面加速略有变化。 Python的开发人员的目的是使其有趣。这反映在其名称中 - 向英国喜剧团体蒙蒂·蟒蛇(Monty Python)致敬,并偶尔使用顽皮的教程和参考材料的方法,例如使用术语“垃圾邮件”和“鸡蛋”(提及蒙蒂Python的素描)在示例中,而不是经常使用的“ foo”和“ bar”

Python社区中的一个常见新言学Pythonic ,它具有与程序风格有关的广泛含义。 “ Pythonic”代码可以很好地使用Python习语,自然或表现出语言的流利性,或者符合Python的简约哲学并强调可读性。难以理解或像从另一种编程语言的粗略转录一样读取的代码称为unpythonic

语法和语义

Python本来是一种易于阅读的语言。它的格式在视觉上整洁,并且经常使用其他语言使用标点符号的英语关键字。与许多其他语言不同,它不使用卷曲括号来界定块,并且允许语句后半olon,但很少使用。与CPascal相比,它的句法例外和特殊情况较少。

缩进

Python使用Whitespace凹痕,而不是卷发括号或关键字来界定。缩进的增加是在某些陈述之后的。减小的减少表示当前块的末端。因此,程序的视觉结构准确地表示其语义结构。此功能有时称为外部规则。其他一些语言以这种方式使用凹痕;但是在大多数情况下,凹痕没有语义含义。建议的凹痕尺寸为四个空间。

陈述和控制流

Python的陈述包括:

  • 分配语句,使用单个等式符号=
  • if语句,有条件地执行代码块elseelif(else-if的收缩)
  • for语句,在一个可迭代的对像上迭代,将每个元素捕获到一个局部变量以供附件块使用
  • while声明,只要其条件为真,就可以执行一个代码块
  • try声明,该声明允许在其附件代码块中提出的例外被捕获和处理except子句(或新语法except*在Python 3.11中,例外组);它还确保了清理代码finally无论块如何退出,始终运行块
  • raise陈述,用于提出指定的例外或重新调整A例外
  • class语句执行代码块并将其本地名称空间附加到,用于以对象为导向的编程
  • def语句,定义函数方法
  • with语句,将代码块包含在上下文管理器中(例如,在运行之前获取,然后释放锁;打开和关闭文件),允许资源 - acquicition-iS-ISInialization (raii)类似于行为并替换常见的尝试/最后
  • break声明,退出循环
  • continue声明,跳过当前迭代的其余部分,然后继续
  • del语句,将删除变量 - 将引用从名称到值删除,如果在重新定义变量之前引用该变量,则会产生错误
  • pass语句用作NOP ,句法需要创建一个空代码块
  • assert语句,用于调试以检查应适用的条件
  • yield语句,从发电机函数(以及运算符)返回值;用于实施Coroutines
  • return语句,用于从函数返回值
  • importfrom语句,用于导入可以在当前程序中使用的功能或变量的模块

分配声明(=)将名称绑定为引用单独的,动态分配的对象。变量随后可以随时反弹到任何对象。在Python中,变量名是没有固定数据类型的通用参考持有人。但是,它总是指某种类型的对象。这称为动态键入- 与静态类型的语言形成鲜明对比的是,每个变量可能仅包含某个类型的值。

Python不支持尾部呼叫优化或一流的连续性,根据Van Rossum的说法,它永远不会。但是,通过扩展Python的生成器提供了更好地支持类似Coroutine的功能。在2.5之前,发电机是懒惰的迭代器;数据在发电机上单向传递。从Python 2.5开启,可以将数据传递回发电机函数。从版本3.3,它可以通过多个堆栈级别传递。

表达

Python的表达包括:

  • +,-, 和*数学加法,减法和乘法的运算符类似于其他语言,但划分的行为有所不同。 Python有两种类型:地板部门(或整数部门)//和浮点/分配。 Python使用**运算符进行启用。
  • Python使用+字符串串联的操作员。 Python使用*用于复制字符串的操作员指定的次数。
  • @Infix操作员。它旨在由numpy等库将其用于矩阵乘法
  • 文法:=在Python 3.8中引入了称为“海像操作员”。它将值分配给变量,作为较大表达式的一部分。
  • 在Python,==按值进行比较。 Python'sis操作员可用于比较对象身份(通过参考比较),并且可以链接(例如)a <= b <= c.
  • Python使用and,or, 和not作为布尔运营商。
  • Python具有一种称为列表理解的表达式,以及称为生成器表达式的更通用的表达式。
  • 使用lambda表达式实现匿名功能;但是,每个身体中可能只有一个表达。
  • 有条件的表达方式为x if c else y(从操作数的顺序不同c ? x : y许多其他语言共有的操作员)。
  • Python在列表元组之间有所区别。列表写为[1, 2, 3],是可变的,不能用作字典的键(字典键必须在Python中不变)。元组,写为(1, 2, 3),如果所有元组的元素都是不可变的,则可以用作字典的键。这+操作员可用于连接两个元组,这不会直接修改其内容,而是产生一个包含两者元素的新元组。因此,给定变量t最初等于(1, 2, 3),执行t = t + (4, 5)首先评估t + (4, 5),产生(1, 2, 3, 4, 5),然后将其分配回t- 有效地“修改内容”t同时符合元组对象的不变性。在明确的上下文中,括号是可选的。
  • python特征序列解开包装,其中多种表达式,每种表达式评估可以分配的任何东西(变量,可写的属性等)都与形成元组文字的相同方式相关联,而整体上都放在左边 - 分配语句中平等符号的手动侧。该声明期望在均等符号的右侧有一个可触及的对象,该对象产生的值与提供的可写表达式相同的值。当通过它们迭代时,它将每个产生的值分配给左侧的相应表达式。
  • Python有一个“字符串格式”操作员%该功能类似于printfc中格式字符串"spam=%s eggs=%d" % ("blah", 2)评估"spam=blah eggs=2"。在Python 2.6+和3+中,这是由format()方法的方法str班级,例如"spam={0} eggs={1}".format("blah", 2)。 Python 3.6添加了“ F-strings”:spam = "blah"; eggs = 2; f'spam={spam} eggs={eggs}'.
  • Python中的字符串可以通过“添加”它们来加入(与添加整数和浮标相同的操作员),例如"spam" + "eggs"返回"spameggs"。如果字符串包含数字,则将它们添加为字符串而不是整数,例如"2" + "2"返回"22".
  • Python有各种字符串文字
    • 由单个或双引号标记界定;与Unix shellPerl和受perl影响的语言不同,单引号和双引号标记也相同。两者都使用后斜切(\)作为逃生角色弦乐插值在Python 3.6中以“格式化的字符串文字”提供。
    • 三重引用(以三个单引号或双引号标记开始和结尾),它们可能跨越多行和功能,如这里的shell,perl和ruby中的文档
    • 原始字符串品种,通过将字符串字面的字样表示r。逃生序列没有解释;因此,在文字反斜线很常见的情况下,原始字符串很有用,例如正则表达式窗口式路径。 (比较 ”@- 引用“在C#中。)
  • Python在列表中具有数组索引阵列切片表达式,称为a[key],a[start:stop]或者a[start:stop:step]。索引基于零,负索引相对于终点。切片从开始索引到停止索引的元素从开始索引到但不包括。第三个切片参数称为步骤大步,可以跳过和反转元素。切片索引可能会被省略 - 例如a[:]返回整个列表的副本。切片的每个元素都是浅副本

在Python中,与普通LISP方案Ruby等语言相比,表达式和陈述之间的区别是严格的。这导致复制一些功能。例如:

  • 列表综合for- 环
  • 有条件的表达与if
  • eval()VS.exec()内置功能(在Python 2中,exec是一个陈述);前者是用于表达式的,后者是用于陈述的

语句不能成为表达式的一部分,即列表和其他综合或lambda表达式,所有均为表达式,不能包含语句。一个特定的情况是诸如a = 1无法构成条件语句的条件表达的一部分。这具有避免经典的C错误误解作业操作员的优势=对于平等操作员==在条件下:if (c = 1) { ... }在句法上有效(但可能是意外的)C代码,但if c = 1: ...在Python中导致语法误差。

方法

对像上的方法是附加到对像类上的函数。文法instance.method(argument)IS,对于普通方法和功能,句法糖Class.method(instance, argument)。 Python方法具有明确的self与隐式自我相比,访问实例数据的参数(或this)在其他一些面向对象的编程语言中(例如, C ++ ,Java, Objective-CRuby )。 Python还提供了通常称为Dunder方法的方法(由于其名称开头和结尾,以双输入尺寸为单位),以允许用户定义的类,以通过本机操作(包括长度,比较)在算术操作和类型转换中修改它们如何通过本机操作进行修改。

打字

Python 3中的标准类型层次结构

Python使用鸭子打字并具有键入对象,但可变量名称。类型约束未在编译时检查;相反,对对象的操作可能会失败,表示它不是合适的类型。尽管是动态键入的,但Python是强烈键入的,但禁止定义不明确的操作(例如,在字符串中添加一个数字),而不是默默地尝试理解它们。

Python允许程序员使用定义自己的类型,最常用于面向对象的编程。通过调用课程来构建类的新实例(例如,SpamClass()或者EggsClass()),以及班级的实例type(本身的实例),允许元编程和反射

在3.0版之前,Python有两种类(都使用相同的语法):旧式新风格的当前Python版本仅支持语义新样式。

Python支持可选类型的注释。这些注释不是由该语言强制执行的,但可以被诸如Mypy之类的外部工具使用来捕获错误。 Mypy还支持一个称为MyPyC的Python编译器,该编译器利用类型注释进行优化。

Python 3的内置类型的摘要
类型可变性描述语法示例
bool不变布尔值True
False
bytearray可变字节序列bytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])
bytes不变字节序列b'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])
complex不变具有真实和虚构部分的复杂数字3+2.7j
3 + 2.7j
dict可变密钥对的关联阵列(或字典);可以包含混合类型(键和值),键必须是可伸的类型{'key1': 1.0, 3: False}
{}
types.EllipsisType不变省略占位符,用作numpy阵列中的索引...
Ellipsis
float不变双精度浮点数。精度是机器依赖性的,但实际上通常以64位IEEE 754数字实现,精度为53位。

1.33333

frozenset不变无序,不包含重复项;如果可以使用,可以包含混合类型frozenset([4.0, 'string', True])
int不变无限幅度的整数42
list可变列表,可以包含混合类型[4.0, 'string', True]
[]
types.NoneType不变代表缺乏值的对象,通常用其他语言称为nullNone
types.NotImplementedType不变可以从超载操作员返回的占位符,以指示不受支持的操作数类型。NotImplemented
range不变一系列不变的数字序列,通常用于在for循环range(-1, 10)
range(10, -5, -2)
set可变无序,不包含重复项;如果可以使用,可以包含混合类型{4.0, 'string', True}
set()
str不变字符串:Unicode Codepoint的序列'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines"""
Spanning
multiple
lines
tuple不变可以包含混合类型(4.0, 'string', True)
('single element',)
()

算术操作

Python具有算术运算符的常用符号(+,-,*,/),地板分区操作员//Modulo操作%(剩余的可能为负,例如4 % -3 == -2)。它也有**为了启动,例如5**3 == 1259**0.5 == 3.0,以及矩阵式运算符@。这些操作员像传统数学一样工作;有了相同的优先规则,操作员输入+-也可以分别代表正数和负数)。

整数之间的分裂产生浮点结果。随着时间的流逝,部门的行为发生了很大变化:

  • 当前的Python(即3.0起)更改/始终是浮点部门,例如5/2 == 2.5.
  • 地板师//介绍了操作员。所以7//3 == 2,-7//3 == -3,7.5//3 == 2.0-7.5//3 == -3.0。添加from __future__ import division导致Python 2.7中使用的模块使用Python 3.0进行分区规则(请参见上文)。

用python术语,/真正的部门(或简单的部门),并且//地板部门。/版本3.0之前是经典部门

朝向负无穷大,尽管与大多数语言不同,但增加了一致性。例如,这意味着方程式(a + b)//b == a//b + 1总是正确的。这也意味着方程式b*(a//b) + a%b == a对于正面和负值的有效a。但是,保持该方程的有效性意味着,虽然a%b正如预期的,在半开间隔[0, b )中b是一个积极的整数,它必须在间隔( b ,0)中b是负面的。

Python提供了round将浮子四舍五入到最近的整数的功能。对于抢七,Python 3使用圆形进行均匀round(1.5)round(2.5)两者都会产生2。在3个使用圆形的零件之前的版本:round(0.5)1.0,round(-0.5)−1.0.

Python允许以与数学中一般使用一致的方式具有多种平等关系的布尔表达式。例如,表达式a < b < c测试是否a小于bb小于c。 C衍生的语言以不同的方式解释此表达方式:在C中,该表达式将首先评估a < b,导致0或1,然后将结果与c.

Python用于所有整数操作,都使用任意精确的算术。这Decimal类型/类decimal模块为预定义的任意精度和几种圆形模式提供小数浮点数。这Fraction上课fractions模块为理性数字提供了任意精度。

由于Python广泛的数学库以及进一步扩展本地功能的第三方库Numpy ,它经常被用作科学的脚本语言,以帮助诸如数字数据处理和操纵等问题。

编程示例

Hello World计划:

print('Hello, world!')

计算积极整数的阶乘的程序:

n = int(input('Type a number, and its factorial will be printed: '))

if n < 0:
    raise ValueError('You must enter a non-negative integer')

factorial = 1
for i in range(2, n + 1):
    factorial *= i

print(factorial)

Python的大型标准图书馆提供了适合许多任务的工具,通常被认为是其最大的优势之一。对于面向互联网的应用程序,支持许多标准格式和协议,例如MIMEHTTP 。它包括用于创建图形用户界面的模块,连接到关系数据库生成伪数编号,具有任意推荐小数的算术,操纵正则表达式单位测试

标准库的某些部分由规格涵盖,例如, Web服务器网关接口(WSGI)实现wsgiref遵循PEP 333,但大多数是由其代码,内部文档和测试套件指定的。但是,由于大多数标准库是跨平台Python代码,因此仅需要更改或重写用于变体实现。

截至2022年11月14日,第三方Python软件的官方存储库Python软件包索引(PYPI)包含超过415,000个包装,具有广泛功能,包括:

开发环境

大多数Python实现(包括CPYTHON)都包括一个读取– EVAL -PRINT循环(REPP),允许它们作为命令行解释器发挥作用,用户可以顺序输入语句并立即接收结果。

Python还带有一个名为IDLE的集成开发环境(IDE) ,它更面向初学者。

其他外壳(包括闲置ipython )增加了进一步的能力,例如改进的自动完成,会话状态保留和语法突出显示

除标准桌面集成的开发环境外,还有基于Web浏览器的IDE,包括SageMath ,用于开发与科学和数学相关的程序; Pythonanywhere ,基于浏览器的IDE和托管环境;和Canopy IDE,这是一种强调科学计算的商业IDE。

实施

参考实现

Cpython是Python的参考实现。它用C编写,符合C89标准(Python 3.11使用C11 ),并具有几个精选的C99功能。 CPYTHON包括其自己的C扩展,但是第三方扩展不仅限于较旧的C版本- EG可以用C11或C ++实现。 CPYTHON分发了一个大型标准库,编写了C和Native Python的混合物,可用于许多平台,包括Windows(从Python 3.9开始,Python Installer故意未能在Windows 7和8上安装; Windows XP受支持直到Python 3.5 )和最现代的Unix型系统,包括MacOS(和Apple M1 Mac,自Python 3.9.1,具有实验安装程序)和对EG VM的非正式支持。平台可移植性是其最早的优先事项之一。 (在Python 1和2开发期间,甚至支持OS/2Solaris ,但此后为许多平台提供了支持。)

其他实现

  • PYPY是Python 2.7和3.8的快速,兼容的解释器。它的即时编译器通常会比Cpython具有显著提高的速度,但是C撰写的一些库不能与其一起使用。
  • 无固定的python是实现微读的cpython的重要叉子。它不会以相同的方式使用呼叫堆栈,从而允许大规模并发程序。 PYPY还具有无固定版本。
  • MicropythonCircuitPython是针对微控制器(包括Lego Mindstorms EV3)优化的3个变体。
  • Pyston是Python运行时的变体,该变体使用即时编译来加快Python程序的执行。
  • Cinder is a performance-oriented fork of CPython 3.8 that contains a number of optimizations including bytecode inline caching, eager evaluation of coroutines, a method-at-a-time JIT , and an experimental bytecode compiler.

不受支持的实现

其他及时的Python编译器也已经开发出来,但现在不支持:

  • Google于2009年开始了一个名为Unladen吞咽的项目,目的是通过使用LLVM加速Python口译员的五倍,并提高其多线程的能力,以扩展到数千个内核,而普通的实施却遭受了全球解释器锁的损失
  • Psyco是一款停用的及时专门化编译器,它与CPYTHON集成并在运行时将字节码转换为机器代码。发射的代码专门针对某些数据类型,并且比标准Python代码更快。 Psyco不支持Python 2.7或更高版本。
  • PYS60诺基亚于2005年发布的60系列手机的Python 2解释器。它实施了来自标准库中的许多模块,并与Symbian操作系统集成了一些其他模块。诺基亚N900还用GTK小部件库支持Python,使程序能够在目标设备上编写并运行。

与其他语言的交叉补偿器

有几个编译器/转换器,具有无限制的Python,Python的受限子集或类似于Python的语言的高级对象语言:

  • Brython,TransCrypt和Pyjs (2012年的最新版本)将Python汇编为JavaScript
  • 密码子将静态输入Python的子集编译为机器代码(通过LLVM ),并支持本机多线程。
  • Cython Compiles(python的超集)到C。Cython的代码也可通过直接的C级API调用与Python解释器一起使用Python。
  • PYJL将Python的子集编译为“可读,可维护和高性能的Julia源代码”。尽管声称高性能,但对于任意Python代码而言,没有任何工具可以声称这样做。即众所周知,不可能编译更快的语言或机器代码。除非更改Python的语义,但是在许多情况下,速度是可能的,而Python代码几乎没有更改。然后可以从Python使用更快的Julia源代码,也可以将其编译为机器代码,并以此方式使用。
  • Nuitka将Python汇编成C。
  • NUMBA使用LLVM将Python的子集编译为机器代码。
  • Pythran编译了Python 3的子集至C ++( C ++ 11 )。
  • 可以将Rpython编译到C中,并用于构建Python的PYPY解释器。
  • Python→11L→C ++转板器将Python 3的子集编译为C ++( C ++ 17 )。

专门:

较旧的项目(或不与Python 3.x和最新语法一起使用):

  • Google的脾气暴躁(2017年最新版本)将Python 2转到
  • Ironpython允许运行Python 2.7程序(以及2021年发行的Alpha ,也可用于“ Python 3.4,尽管可能包括后来版本的功能和行为”)在.NET Common Common Language Runtime上)。
  • Jython将Python 2.7编译到Java字节码,允许使用Python程序中的Java库。
  • Pyrex (2010年的最新版本)和Shed Skin (2013年最新版本)分别编译为C ++。

表现

Euroscipy '13介绍了非数字(组合)工作量的各种Python实现的性能比较。与其他编程语言相比,Python的性能也通过计算机语言基准游戏进行了基准测试。

发展

Python的开发主要是通过Python增强建议(PEP)流程进行的,这是提出主要新功能,收集社区投入问题并记录Python设计决策的主要机制。 PEP 8涵盖了Python编码样式。Python社区和指导委员会对杰出的PEP进行了审查和评论。

语言的增强与Cpython参考实现的开发相对应。邮件列表Python-Dev是该语言开发的主要论坛。最初在基金会主持的综述错误跟踪器中讨论了具体问题。在2022年,所有问题和讨论都迁移到Github 。开发最初是在自托管源代码存储库Mercurial上进行的,直到Python于2017年1月移居Github

Cpython的公共发布有三种类型,与版本号的哪一部分相分化为区分:

  • 向后不兼容的版本,其中预计代码将打破并需要手动移植。版本编号的第一部分已增加。这些发行版很少发生 - 第3.0版是在2.0后8年发布的。根据Guido van Rossum的说法,4.0版本不太可能发生。
  • 主要或“功能”发行版在很大程度上与以前的版本兼容,但引入了新功能。版本编号的第二部分是增加的。从Python 3.9开始,预计这些版本将每年发生。每个主要版本都由错误修复后的几年来支持。
  • BugFix发行版本没有引入新功能,大约每3个月就会发生,并且自上次版本以来已经在上游固定了足够数量的错误时制作。这些版本中还修补了安全漏洞。版本编号的第三部分也是最后一部分是增加的。

许多alpha,beta和释放candidates也被作为预览发布,并用于在最终发行之前进行测试。尽管每个版本都有一个粗略的时间表,但如果代码还没有准备就绪,通常会延迟它们。 Python的开发团队通过在开发过程中运行大型单元测试套件来监视法规的状态。

Python的主要学术会议Pycon 。还有特殊的Python指导计划,例如

Python 3.12删除wstr这意味着需要修改Python扩展,并且3.10添加了与语言匹配的模式

Python 3.12放弃了一些过时的模块,将来将删除更多的模块,截至3.13;自3.13以来,已经弃用的阵列“ U”格式代码将发出弃用战争,并将在Python 3.16中删除。应该使用“ W”格式代码。 CTYPES的一部分也被弃用,HTTP.Server.cgihttprequesthandler将发出弃用式抗辩,并将在3.15中删除。使用该代码已经对安全性和功能错误具有很高的潜力。不建议使用打字模块的一部分,例如创建一个键入。使用关键字参数来表示字段等类别的类别类别(以及更多)在Python 3.15中将不允许使用。

API文档生成器

可以生成Python API文档的工具包括Pydoc (作为标准库的一部分), SphinxPDOC及其前叉, DoxygenGraphViz等。

命名

Python的名字源自英国喜剧团体Monty Python ,Python创作者Guido Van Rossum在开发语言时享受了他。 Monty Python参考文献经常出现在Python代码和文化中。例如,python文献中经常使用的元句法变量垃圾邮件鸡蛋而不是传统的foobar 。 Python官方文档还包含对Monty Python例程的各种参考。 Python的用户有时被称为“ Pythonistas”。

前缀py-用于证明与python相关的东西。在Python应用程序或库的名称中使用此前缀的示例包括PyGameSDL与Python的绑定(通常用于创建游戏); PyqtPygtk ,分别将QT和GTK与Python结合;和Pypy ,是最初用Python编写的Python实施。

受欢迎程度

自2003年以来,Python一直在Tiobe编程社区指数中排名前十的十大编程语言,截至2022年12月,它是最受欢迎的语言(在C,C ++和Java之前)。它被选为2007年,2010年,2018年和2020年(截至2020年,唯一一次这样做四次)的年度编程语言(对于“一年中评级的最高上升”)。

一项实证研究发现,诸如Python之类的脚本语言比传统语言(例如C和Java)更有生产力,用于涉及字符串操纵和搜索字典的编程问题,并且确定记忆消耗通常比Java更好,不是Java更好比C或C ++差得多。

使用Python的大型组织包括WikipediaGoogleYahoo!CernNASAFacebookAmazonInstagramSpotify以及ILMITA等一些较小的实体。社交新闻网站Reddit主要写在Python中。

用途

Python供电

Python可以用作Apache WeberverMOD_WSGI作为Web应用程序脚本语言。使用Web Server网关接口,标准API已演变以促进这些应用程序。在复杂应用程序的设计和维护中,诸如Django ,Django, PylonsPyramidTurbogears ,Turbogears,Turbogears, Web2pytornadoBlask ,Bast和Zope Supporters之类的网络框架。 Pyjs和Ironpython可用于开发基于AJAX的应用程序的客户端。 SQLalchemy可以用作关系数据库的数据映射器Twisted是计算机之间编程通信的框架,并通过Dropbox使用(例如)。

诸如NumpyScipyMatplotlib之类的库允许在科学计算中有效使用Python,并提供专门的库,例如BiopythonAstropy提供域特异性功能。 SageMath是一个计算机代数系统,具有可在Python中编程的笔记本接口:其库涵盖数学的许多方面,包括代数组合学数值数学数字理论计算OpenCV具有Python绑定,具有丰富的计算机视觉图像处理功能。

Python通常在人工智能项目和机器学习项目中使用,借助TensorflowKerasPytorchScikit-Learn 。作为具有模块化体系结构,简单语法和丰富文本处理工具的脚本语言,Python通常用于自然语言处理

Python也可以通过使用TKINTER等库来用于图形用户界面(GUI)。

Python也可以用于创建游戏,其中包括Pygame等图书馆,可以制作2D游戏。

Python已成功地嵌入了许多软件产品中,包括脚本语言,包括在有限元方法软件中,例如Abaqus ,3D参数建模器,例如Freecad ,3D动画包,例如3DS MaxBlenderCinema 4D ,Cinema 4DLightwaveHoudini ,Modo,Modo,Modo,Modo,Modo,Modo,Modo,Modo,Modo,Modo, ModoMotionBuilderSoftImage ,Visual Effect Compositor Nuke ,2D成像程序,例如GIMPInkscapeScribusPaint Shop Pro ,以及SocewriterCapella音乐符号程序。 GNU调试器使用Python用作漂亮的打印机,以显示复杂的结构,例如C ++容器。 ESRI推广Python是在Arcgis编写脚本的最佳选择。它也已在几个视频游戏中使用,并已被用作Google App Engine中三种可用编程语言中的第一个,其他两种是JavaGo

许多操作系统包括Python作为标准组件。它具有大多数Linux发行版Amigaos 4 (使用Python 2.7), FreeBSD (作为包装), NetBSDOpenBSD (作为包装),可以从命令行(终端)使用。许多Linux发行版都使用用Python编写的安装程序: Ubuntu使用Ubiquity安装程序,而Red Hat LinuxFedora Linux使用Anaconda安装程序。 Gentoo LinuxPortage包装管理系统中使用Python。

Python广泛用于信息安全行业,包括利用开发。

截至2008年,在糖实验室开发的每个孩子XO的一台笔记本电脑的大多数软件都是用Python编写的。 Raspberry Pi单板计算机项目已采用Python作为其主要用户编程语言。

Libreoffice包括Python和打算用Python代替Java。自2013年2月7日以来,其Python脚本提供商是4.0版以来的核心功能。

受Python影响的语言

Python的设计和哲学影响了许多其他编程语言:

  • BOO使用凹痕,类似的语法和类似的对像模型。
  • 眼镜蛇使用凹痕和类似的语法,其确认文档列出了影响它的语言的首先。
  • Coffeescript是一种编程与JavaScript的编程语言,具有Python启发的语法。
  • Ecmascript / JavaScript从Python借来了迭代器和发电机
  • GDScript是一种与Python非常相似的脚本语言,该语言与Godot Game Engine内置。
  • GO是为“以Python等动态语言工作的速度”而设计的,并共享用于切片数组的相同语法。
  • Groovy是为了将Python设计哲学带到Java的愿望而激发。
  • 朱莉娅(Julia)被设计为“适用于Python的一般编程”。
  • Mojo目前是一个非局部性(目标是严格的)超集Python(例如仍然缺少类,并添加例如struct ),并且对于某些代码而言,最多35,000倍( Mandelbrot ,因为它是令人尴尬的平行),因为它是令人尴尬的)静态键入有助于(并实现MLIR ),例如,对于矩阵乘法而言,速度更快4000倍。
  • NIM使用凹痕和类似的语法。
  • Ruby的创作者Yukihiro Matsumoto说:“我想要一种比Perl更强大的脚本语言,比Python更强大。这就是为什么我决定设计自己的语言的原因。”
  • Swift是Apple开发的编程语言,具有一些以Python为灵感的语法。

Python的发展实践也由其他语言模仿。例如,在TCLErlang和Swift中还使用了需要描述对语言(Python,Pep中的Python)更改(在Python中)进行更改的文档的实践。

也可以看看