Python

来自Local Chinese Wikipedia
imported>1F616EMO2026年5月5日 (二) 00:58的版本 (撤銷~2026-26984-28對話)做出的出於善意的編輯:​手動轉換繁簡、異體及地區用詞:請勿手動轉換條目內的繁簡用字或地區用詞。維基百科軟件可以自動轉換相關用字,若發現轉換錯誤請到字詞轉換佈告板報告。若您的瀏覽器安裝了同文堂等繁簡轉換軟件,請在編輯時將其關閉或移除。 // AdvancedRollback
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:Hatnote Template:NoteTA 脚本错误:没有“Infobox”这个模块。Template:Template other脚本错误:没有“Check for unknown parameters”这个模块。

Python脚本错误:没有“IPA”这个模块。脚本错误:没有“IPA”这个模块。),是一种广泛使用的解释型高级通用编程语言。Python支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。它的语言结构以及面向对象的方法,旨在帮助程序员为小型的和大型的项目编写逻辑清晰的代码。

吉多·范罗苏姆于1980年代后期开始研发Python,作为ABC语言的后继者[1],它也可以被视为采用了叫做Template:Le中缀表示法的一种LISP方言[2]吉多·范罗苏姆于1991年首次发布 Python 0.9.0[3]。Python 2.0于2000 年发布并引入了新功能。Python 3.0于2008年发布,它是该语言的主要修订版,并非完全向后兼容。Python 2于2020年随2.7.18版停止支持[4]

Python的设计哲学,强调代码的可读性和简洁的语法,尤其是使用空格缩进来划分代码块。相比于C语言Java,Python让开发者能够用更少的代码表达想法。

Python解释器本身几乎可以在所有的操作系统中运行,它的官方直译器CPython是用C语言编写的。Python是一个由社群驱动的自由软件,目前由Python软件基金会管理。Python是最受欢迎的编程语言之一[5][6][7][8]

历史[编辑]

脚本错误:没有“main”这个模块。 Template:CSS image crop

Python的创始人吉多·范罗苏姆,在1982年至1995年间,参与了荷兰数学和计算机科学研究学会多个项目的工作[9]。1989年的圣诞节期间,他决心开发一个新的脚本解释程式,作为ABC语言的后继者,并且用它替代Unix shellC语言来进行系统管理[1],担负与Template:Le[10]之间的交互操作并进行例外处理[11]。他是BBC电视剧《Monty Python的飞行马戏团》的爱好者,所以选取了Python作为这个编程语言的名字[12]。范罗苏姆作为Python的主要开发者,独自担负这个项目的发展决策者职责,直到2018年7月12日,他宣布从终身仁慈独裁者(BDFL)的职位上“永久休假”[13][14]。他参与了2019年第一届领导项目发展的五人掌控委员会[15][16]

在1991年2月,范罗苏姆在Usenet新闻组alt.sources上发布了最初代码(标记为版本0.9.0)[17],这时就已经存在了带继承的例外处理函数和核心类型listdictstr等。在这个最初发行中就有了从Modula-3引进的模块系统[18],和例外处理机制[11]。在1994年1月,Python版本1.0发布[19],其主要新特征是由Amrit Prem提供的函数式编程工具lambdamapfilterreduce[20]。受Modula-3启发,Python 1.1介入了参数缺省值,Python 1.3介入了关键字参数。Python 1.4介入了对复数的内建支持[21]

在2000年10月,Python 2.0发布,它从函数式编程语言Haskell中引进了列表推导式[22]。Python 2.1支持了静态嵌套作用域[23]。Python 2.2进行了重大革新,将Python中用C语言写成的类型,和用Python语言写成的,统一成在同一个层级中,使得Python的对象模型成为纯粹而一致的对象模型[24];还介入了迭代器[25],受CLUIcon启发的生成器[26],和描述器协议[27]。Python 2.3介入了从Dylan引进的方法决定次序[28]。Python 2.4介入了Template:Le类型,和函数修饰器[29]。Python 2.5在官方实现中介入了抽象语法树[30]

在2008年12月,Python 3.0发布,它对语言做了较大修订而不能完全后向兼容[31],尽管提供了进行自动转换的2to3实用工具,仍有大量现存代码不能移植,故而Python 2.7的产品寿命结束延期至2020年元旦。Python 3.4介入了异步I/O模块[32]。Python 3.5介入了类型提示[33],和采用async/await语法的协程[34]。Python 3.8介入了赋值表达式[35][36]

在2020年10月,Python 3.9介入了内建的针对容器类的泛化别名types.GenericAlias类型[37],并在官方实现中介入了新的语法解析器[38]。Python 3.10介入了从HaskellOCaml等借鉴来的结构式模式匹配[39],和内建的联合类型types.UnionType[40]。Python 3.11对官方实现进行了优化提速[41]。Python 3.12介入了类型参数语法[42],并废弃或移除了一些过时的模块和功能。

在2024年10月,Python 3.13介入了从PyPy引进的新交互式解释器,并实验性的支持了即时编译器[43]。Python 3.14正式支持了自由线程Python的官方实现构建选项[44]

每个版本首次发行后,享有2年的完全支持,随后是3年的安全支持。当前只有Python 3的稳定版本3.13与3.14正在被完全支持,但仍提供对3.10、3.11和3.12版本的安全性修正[45]

在2025年12月,活跃的Python核心开发者,选举Pablo Galindo Salgado、Savannah Ostrowski、Barry Warsaw、Donghee Na和Thomas Wouters,为2026年度掌控委员会的五位成员来领导这个项目[46]

特征与设计哲学[编辑]

Python是多范型编程语言。它完全支持结构化编程面向对象编程,还有很多特征支持函数式编程元编程比如元对象协议元类和魔术方法[47])。通过扩展还可以支持很多范型,包括面向方面编程[48]契约式设计[49]逻辑编程[50]

Python使用动态类型,在内存管理上采用的垃圾回收器基于了引用计数[51],并且结合了检测引用的分代垃圾回收优化[52]。它的特征还有动态名字解析Template:Le),即在程序执行期间绑定方法和变量的名字。

Python对遵循LISP传统的函数式编程提供了有限的支持[53],它提供了 mapfilterreduce函数[54]列表推导式字典推导式Template:Le推导式生成器表达式。标准库中的模组functoolsitertools,实现了从HaskellStandard ML借鉴来的函数式工具[55]

Python的设计理念是“优雅”、“明确”、“简单”,它的一些重要准则被合称为“Python之禅”。在Python解释器内运行import this可以获得完整的列表,下面举出其中首要:

  • 优美优于丑陋。明了优于隐晦。
  • 简单优于复杂。复杂优于凌乱。
  • 扁平优于嵌套。稀疏优于稠密。
  • 可读性很重要。

Python开发者的方法论是“用一种方法,最好是只有一种方法来做一件事”,显著不同于以Perl语言为代表的“不止一种方法去做一件事”风格。Python开发者在设计语言时,如果面临多种选择,一般会选择明确没有或者很少有歧义的语法。

范罗苏姆将Python本身设计为可扩充的[56],并不把所有的特性和功能都集成到语言核心,而是提供了丰富的API和工具,以便程序员能够轻松地使用Python、C语言、Cython来编写扩充模组。Python还可以通过Template:Le如标准库中的ctypes等,来提供C语言兼容数据类型,并访问动态链接库共享库中的函数[57],从而对用其他语言编写的程式进行集成和封装。

在Python的官方实现CPython中,一般避开不成熟的或者对非重要部位的加快运行速度的优化。在某些对运行速度要求很高的情况,可以使用具备JIT技术的Python实现或安装JIT扩展模块[58]

语法和语义[编辑]

脚本错误:没有“main”这个模块。 Python为了让程式码具备高度的可阅读性,在设计时尽量使用了其它语言常用的符号和英文单字。

行结构[编辑]

Python程序在词法分析上被分成若干逻辑行。简单语句包含在一个单一的逻辑行之内,Python支持使用分号作为分隔符,将多个简单语句合并入一个逻辑行之中[59]

注释开始于并非Template:Le一部分的一个井号#,并结束于物理行结尾;注释标示逻辑行的结束,除非已受制于隐式行接续规则;注释在语法上被忽略[60]

Python支持使用反斜杠作为行接续符,将多个物理行合成为一个逻辑行[61]。在圆括号方括号花括号之中的表达式,可以分裂跨越多于一个物理行而不使用反斜杠,这被称为“隐式行接续”[61]

缩排[编辑]

Python语法中的复合语句,包含了一些其他语句,它们以某种方式影响或控制这些其他语句的执行。Python的复合语句包含一个或多个子句(clause),子句构成自一个头部(header)和一个套件(suite)。特定复合语句的子句头部都在同样的缩排层级上,每个子句头部开始于一个唯一标识关键字,并结束于一个冒号。套件即语法意义上的,是这个子句所控制的一组语句。

套件有两种形式:可以是与头部在同一行上的一个或多个由分号分隔的简单语句,它们跟随在这个头部的冒号之后;或者是遵循越位规则的在连续诸行上的一个或多个缩排的语句,只有这种套件形式可以包含嵌套的复合语句[62]Template:Efn

根据PEP 8的规定[63],使用4个空格来表示每级缩排Template:Efn 缩排层级的变迁,被用来生成语法解析器才能见到的INDENTDEDENT记号[64],增加缩排就生成INDENT记号,减少缩排就生成DEDENT记号。二者的作用相当于C语言家族的花括号,或Pascal语言家族的关键字beginend

关键字[编辑]

Python有如下35个关键字;它们不能用作标识符[65]

  • and
  • as
  • assert
  • async
  • await
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • False
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • None
  • nonlocal
  • not
  • or
  • pass
  • raise
  • return
  • True
  • try
  • while
  • with
  • yield

内建常量TrueFalseNone于Python版本3.0中成为关键字,关键字nonlocal介入于版本3.0[66],关键字asyncawait介入于版本3.5[67],并在版本3.7中成为正式关键字[68]

在Python中,将只在特定上下文中保留的标识符,称为“软关键字”[69]

  • matchcase通配符_,介入于版本3.10,它们在与模式匹配语句有关的上下文中,可以在语法上充当关键字;但是这种区分只在语法解析器层次进行,并非在词法分析记号化层次。
  • type,介入于版本3.12,它用在type语句之中。

标识符[编辑]

标识符就是名字,在ASCII范围内(U+0001..U+007F),可用于标识符的字符为:大写字母AZ和小写字母az,下划线_以及数字09,但首字不可以用数字。如下命名约定[70],是为“保留标识符类”[71]

  • _spam(单下划线开头):弱“内部使用”标识。对于from M import *,将不导入所有以下划线开头的对象。
  • spam_(单下划线结尾):为了避免与python关键字的命名冲突。
  • __spam(双下划线开头):在命名一个类特性的时候,采用名字修饰,比如在类SpamEggs内,__spam将变成_SpamEggs__spam[72]
  • __spam__(双下划线开头双下划线结尾):指那些包含在用户控制的命名空间中的“魔术”方法或特性,比如__delattr____dir____doc____getattribute__[73]__init____new____repr____setattr____sizeof__等。建议永远不要将这样的命名方式应用于自己的变量或函数。

语句[编辑]

Python的语句包括简单语句:

  • 赋值语句,采用的中缀记号是等号=。赋值语句被用来将名字绑定(含重新绑定)到值,以及用来修改可变对象特性或项目。赋值语句支持链式赋值
    • Python还支持增广赋值语句[74],将一个二元运算和一个赋值语句合并成一个单一语句,例如x += 1
    • Python支持“序列解包”[75]:在等号左侧可以是一个表达式列表,其中每个表达式都可求值成能被赋值的东西;在等号右侧相应的是一个“可迭代”对象,它在被迭代时产生的值的数量,同于左手侧可写表达式的数量;赋值语句对这个对象进行迭代,将产生的每个值分别赋值给左侧对应的可赋值者。在等号右侧直接包装出序列解包所要求的元组,就形成了并行赋值Template:Efn
  • Template:Le语句,用来交互式的计算并写出一个值,或者用来调用一个过程(即返回无含义结果的函数),在Python中过程返回值None
  • global语句,是在整个当前代码块中成立的声明,它意味着随后列出的标识符被解释为全局变量。
  • nonlocal语句,导致随后列出的标识符,提及在除了全局作用域之外的最近包围作用域中的先前绑定变量。
  • del语句,递归的进行删除。
  • type语句,声明作为类型别名类型(typing.TypeAliasType)的实例的一个类型别名。
  • pass语句,充当无操作指令,表示此行为空,不执行任何操作。
  • assert语句,用于程式调适阶段时测试执行条件是否满足。
  • continue语句,越过这次迭代并继续进行下个项目。
  • break语句,从循环中跳出。
  • raise语句,抛出一个例外。
  • return语句,用来从函数返回值。当函数执行到return语句时,它会停止执行并将指定的值返回给调用者。
  • yield语句,用来从一个生成器中返回一个值[76]yield语句在语义上等价于加圆括号的yield表达式[77],在函数主体中使用yield表达式将导致它成为生成器函数。Template:Efn
    • 通过生成器的send()方法传入的信息,就是其中yield表达式的返回值。Template:Efn
    • 自从版本3.3,介入了yield from语句,它在语义上等价于加圆括号的yield from表达式,含有此表达式的生成器函数将特定任务委托给另一个子生成器函数,将传入信息递送给它并直接回传它产生的值[78]
    • 自从版本3.6,在协程函数主体中使用yield表达式将导致它成为异步生成器函数[79]
  • import语句,导入一个模块或包,它组合了两种操作,查找指名的模块,接着将找到的结果绑定到在局部作用域中的名字。导入语句有三种形式(下述语句样本采用了EBNF,这里的方括号表示其中内容为可选的):
    • import 模块名字 [as 别名],找到一个模块,装载它,如果有需要的话初始化它;在这个导入语句出现的作用域的局部名字空间中,定义一个名字或一些名字[80]
    • from 模块名字 import 定义1 [as 别名1], 定义2 [as 别名2], …,找到、装载、必需时初始化一个模块;接着在局部名字空间中,增加到找到指名特性的引用[80]
    • from 模块名字 import *,在导入语句出现的作用域的局部名字空间中,绑定模块中定义的所有公开的名字[81]

复合语句:

  • if语句,当条件成立时执行语句套件。它经常包含elifelse子句。
  • while语句,当条件为真时,重复执行语句套件。
  • for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
  • match语句,用于模式匹配
  • class语句,是定义的可执行语句。Template:Efn
  • def语句,是定义函数方法的可执行语句。Template:Efn
  • async def语句,用于协程函数定义。await表达式、async for语句和async with语句,只能用在协程函数的主体中。Template:Efn
  • Template:Le语句,它经常包含exceptelsefinally子句,处理在程式执行中出现的例外情况。Python 3.11介入了except*子句[82]。Python支持并广泛使用EAFP(请求原谅比获得许可更容易)风格的例外处理,作为检测错误状况和程序中其他“例外”事件的方式。例如:在访问一个文件或资源之时,事先不进行测试就尝试使用它,事后再捕获可能的访问失败所引发的例外。Template:Efn
  • with语句,把一块代码包裹在一个上下文管理器之内。它允许了RAII(对象初始化时获取资源)方式的行为,可替代常见的try/finallyTemplate:Le。Python使用with语句处理资源[83],例如:在执行一块代码时,事先获取一个,并且事后释放这个锁;或事先打开一个文件,并且事后关闭这个文件。Template:Efn

块与模块[编辑]

在Python的执行模型中,程序构造自(也称为代码块)。块是作为一个单元执行的Python程序文本,模块、函数主体和类定义都是块。交互式键入的每个命令、脚本文件和脚本命令都是块。传递给内建函数eval()exec()执行的字符串是块。块在执行框架(frame)中执行。框架包含一些用于调试的管理信息,并确定在这个块执行完成后,执行在何处以及如何继续。

模块是包含Python定义和语句的一个文件,这个文件名字是模块名字附加上后缀.py;在一个模块中,模块的名字(作为字符串)可获得为全局变量__name__的值[81](package)是可以包含子模块或递归性的子包的模块。包在技术上是具有__path__特性的Python模块。可以将包视为文件系统上的目录,而将模块视为这种目录中的文件,但是包和模块不必然源自文件系统[84]

名字即标识符,是通用的引用持有者,它不关联于一个固定的数据类型,但是,一个名字在给定时间,总是被绑定到有一个类型的某个对象上,这就是动态类型的特征。名字的存储位置不“包含”所指示的值,一个共同的值可以赋值给多个名字,一个名字在任何时候,都可以重新绑定到各种不同类型的对象上,包括字符串、过程、具有数据和方法的复杂对象等。

如果一个名字绑定在一个中,它是这个块的局部变量,除非被声明为nonlocalglobal。如果一个名字绑定在模块层次,它是全局变量。模块对应的块的变量,既是局部的也是全局的。如果一个变量使用在一个块中,却不定义在这里,它是自由变量[85]Template:Efn

在Python中,赋值所进行的操作,是将一个名字绑定为到一个分立的动态分配的对象的一个引用Template:Efn 作用域定义一个名字在一个中的可见性。如果一个局部变量被定义在一个块中,它的作用域包括这个块。如果这个定义出现在一个函数块中,作用域扩展到在所界定作用域内包含的任何块,除非所包含的块为这个名字介入了不同的绑定。对一个块可见的所有这种作用域的集合,叫做这个这个块的“环境”[85]Template:Efn

当一个名字在一个之中使用,它采用最近包围作用域来解析。如果一个名字绑定在一个块中,并且在其中于绑定之前就被使用,会导致一个错误。Template:Efn当一个函数或类的定义被嵌套到其他函数的定义之内,它的非局部作用域就是这个包围函数的局部作用域。nonlocal语句导致其列出的标识符,提及在非局部作用域内先前绑定的名字(即Template:Le[85]Template:Efn

名字空间是存储变量的地方,它被实现为字典。有局部名字空间、全局空间即包含这个块对应的模块的名字空间,和内建名字空间即模块builtins的名字空间;对象的方法是定义在类主体内的函数,它有着嵌套的名字空间。名字空间通过防止命名冲突而支持了模块性,还通过明晰了哪个模块实现了哪个函数而增进可读性和可维护性。

如果global语句出现在一个之中,在这个语句中指定的所有名字,提及在顶层名字空间中这些名字的绑定。名字在顶层名字空间解析,首先查找全局名字空间,未果查找内建名字空间。global语句与在同一个块中的名字绑定运算有同样的作用域。如果一个自由变量的最近包围作用域包含针对它的global语句,这个自由变量被当作全局的[85]Template:Efn

表达式[编辑]

Python的Template:Le主要包括如下:

  • 在Python中,表达式的最基本元素被称为原子,最简单的原子是Template:Le标识符。由逗号,分隔的一系列表达式,叫做表达式列表。
  • 在Python中,加圆括号(parenthesized)形式被归类为原子,它是包围在圆括号中的可选的表达式列表。加圆括号的表达式列表产生的东西,就是这个表达式列表所产生的:如果这个列表包含至少一个逗号,例如(a,b,c),则它产生一个元组;否则它产生的就是这个单一表达式,例如(a)产生a[86]。要表示仅有单个元素的元组,需要给这个元素后缀一个逗号,例如(a,)。空的圆括号产生空元组对象。元组不是圆括号形成的,而是使用逗号形成的,在没有歧义的情况下,元组的圆括号是可选的。
  • Python提供了称为展示(display)的特殊语法来构造列表字典Template:Le,展示被归类为原子,并且有两种方式:要么其所包容的元素是显式的列举出来的,要么它们是通过叫做“推导式”的特定循环和过滤指令运算出来的。列表展示,是包围在方括号中的可以为空的一系列表达式,例如[a,b,c]字典展示,是包围在花括号中的可能为空的一系列的用冒号:分隔的键-值对。Template:Le展示,是包围在花括号中的一系列表达式[87]Template:Efn
  • Python对容器实例,比如序列类型的列表元组字符串,支持形如a[索引]下标,和形如a[开始:停止]a[开始:停止:步长]Template:Le。此二者与函数调用和特性引用,一起被归类为表示语言中最紧密运算绑定的初等项(primary)。这里的下标索引是基于零的,负数是相对于结尾的。分片范围自从开始索引,直到但不包括停止索引,分片的第三个步长参数,允许元素被跳过和用负数指示反向。分片的每个元素都是Template:Le的。分片索引可以省略,例如a[:],这返回整个列表的一个复本。Template:Efn
  • 在Python中,算术运算的加法+、减法-、乘法*,与C语言和java相同的。除法和模除%的行为有所不同,在Python中有两种除法:除法/下取整除法//。Python增加了指数算符**。自从Python 3.5,介入了矩阵乘法算符@[90],它已经用于了NumPy[91]中缀算符+-,还可以分别表示取原数和取相反数一元算符。
  • 在Python中,有如下必须用于整数的运算:AND(与)&、OR(或)|、NOT(非)~、XOR(异或)^、右移>>、左移<<
  • 在Python中,有如下比较运算:大于>、小于<、大于等于 >=、小于等于<=、等于==、不等于!=,用来比较两个对象的值的大小。Python有同一性测试算符:isis not,用来比较两个运算元是否引用了同一个对象;还有成员关系测试算符:innot in,用于判断一个对象是否属于另外一个对象。Python允许由比较运算链接起来的布尔表达式[92],比如a < b < c,它测试a < b and b < c;C语言将它解析为(a < b) < c:即首先求值a < b得出结果01,接着将此结果比较于c[93]
  • Python使用andornot表示逻辑运算,不采用C语言和Java中所用的符号&&||!
  • Python的条件表达式表示为x if c else y。意思是当c为真时,表达式的值为x,否则表达式的值为y。 在运算元的次序上不同于很多其他语言中常见的c ? x : y
  • 自从Python 3.8,介入了赋值表达式,其记号是:=[35]。它将一个表达式赋值给一个标识符,同时还返回这个表达式的值。Template:Efn

Python中运算符具有优先级,下表中的运算符按照从最高(最先绑定)到最低(最后绑定)的次序列出。在相同单元格中运算符具有相同的优先级,它们从左至右结合,除了指数表达式和条件表达式从右至左结合之外[94]

运算符 描述
(表达式 …)[表达式 …]{: …}{表达式 …} 绑定或加圆括号表达式,列表展示,字典展示,集合展示
x[索引]x[索引:索引]x(参数 …)x.特性 下标,分片,调用,特性引用
await x await表达式
** 指数
+x-x~x 取原数,相反数,逐位NOT
*@///% 乘法,矩阵乘法,除法,下取整除法,余数
+- 加法和减法
<<>> 移位
& 逐位AND
^ 逐位XOR
| 逐位OR
innot inisis not<<=>>=!=== 包含成员关系测试,同一测试,各种比较
not x 布尔NOT
and 布尔AND
or 布尔OR
… if … else … 条件表达式
lambda lambda表达式
:= 赋值表达式

Python为序列提供了串接算符+和倍增算符*[95]。自从Python 3.9,介入了字典归并算符|和字典更新算符|=[96]

Python为Template:Le提供了集合论运算:并集|交集&相对补集-对称差^,和子集测试<=真子集测试<超集测试>=真超集测试>

在Python中,语句不能成为表达式的一部分,表达式比如列表推导式和字典推导式以及lambda表达式,都不能包含语句。这个限制的一个示例:赋值语句比如a = 1,不能用作条件语句的条件判断表达式的一部分;这能够避免C语言编程中的一个常见错误,即在条件判断时把等于算符==误写为赋值算符=,这不是预期代码却在语法上有效而能通过C语言编译器检查,在Python中这会导致一个语法错误。

数值运算[编辑]

Python的二元算术运算,先将两运算元转为共同类型,加法减法乘法下取整除法模除指数运算的结果也采用此类型,举下取整除法//例子:5//2 == 25.0//2 == 2.0。自从Python 3.0,除法/总是产生浮点数结果,例如5/2 == 2.5

下取整除法//修约是朝向负无穷的,这意味着等式Template:Code永远成立;很多其它编程语言比如C99采用截尾取整规则,其整数除法不能保证这个等式永远成立。Python提供了round()内建函数,用于把一个浮点数修约成最近的整数[97],自从Python 3.0,为了打破平局它采用了IEEE 754约半成偶规则,例如round(1.5) == 2 == round(2.5)

模除%同样采用下取整规则,它所得余数的符号同于除数,例如-5%2 == 15%-2 == -1。很多其它语言采用截尾取整规则,其模除所得余数的符号同于被除数。Python模除运算结果余数的定义,确使等式Template:Code对于an分别为正数或负数的情况均为成立[98];数学中的欧几里得除法,同样保证这个等式永远成立,但它的余数总是非负数。

Python对所有整数运算,使用任意精度算术。在decimal模块中的Decimal[99],提供Template:Le,具有用户可按需要而更改的缺省28个十进制有效数位精度,并有多种修约方式[100]。在fractions模块中的Fraction类,提供任意精度的有理数[101]。第三方库gmpy2[102],提供了到任意精度计算GMP/Template:LeTemplate:Le和MPC的接口。

除了求绝对值函数abs()列入内建函数之外,大多数数学函数,处于mathcmath模块内。前者用于实数运算,而后者用于复数运算。Python有着广泛的数学库,特别是第三方库NumPy进一步扩展了固有能力。

字符串操作[编辑]

Python的文本序列类型,包括字符串str字节序列bytesbytearray。文本序列的文字有多种写法:

  • Template:Le,由单引号'或双引号"界定。不同于Unix shellPerl和受Perl影响的语言,单引号和双引号功能相同。这二种字符串都使用反斜杠\作为转义字符
  • 长字符串文字,是开始并结束于三个单引号'''或三个双引号"""的序列。它们可以跨越多行,其功能就像shellPerlRuby中的here文档
  • 字节Template:Le总是前缀上一个bB,它产生bytes类型的实例。它们只可以包含ASCII字符,其数值大于等于128的字节必须通过转义来表达。
  • 字符串文字或字节文字都可选的能前缀上一个rR,这叫做Template:Le。转义序列不被解释,因此在文字反斜杠常见的地方很有用,比如正则表达式Windows风格的路径。
  • Python允许多个毗邻的字符串文字或字节文字(它们以空白分界并可以使用不同的引述约定),在编译时间于语法层面上串接起来。要在运行时间串接字符串,必须使用序列串接算符+[103]

自从Python 3.0,字符串类str提供了Template:Le方法format()[104],例如"spam={0} eggs={1:04d}".format("blah", 2),它求值为'spam=blah eggs=0002'。格式化方法被推荐用来替代早先的字符串对象内建格式化算符%,它在功能上类同于C语言中的printf格式化字符串[105],例如"spam=%s eggs=%04d" % ("blah", 2)

自从Python 3.6,介入了Template:Le[106],即“格式化字符串文字”或称为“f字符串”,它向字符串文字前缀上fF[107],例如x="blah"; y=2; f'spam={x} eggs={y:04d}'

类型[编辑]

File:Python 3.13 Standrd Type Hierarchy-en.svg
Python 3的标准类型层级[108]

Python使用鸭子类型,并拥有有类型的对象,和无类型的变量名字。在编译期不检查类型约束,而宁愿在一个对象上的操作出现可能的失败,表现出这个给定对象不具有适合的类型。尽管是动态类型系统,Python却是强类型的,禁止没有明确定义的操作,比如将一个数和一个字符串相加,而不是默默的去尝试转换使其有意义。

Python有着范围广泛的基本数据类型。同时具备常规的整数和浮点算术,它透明的支持任意精度算术复数Template:Le。Python支持种类繁多的字符串操作。在Python中,字符串是不可变的,所以在其他编程语言中可能就地改变字符串的字符串操作,比如字符替换,在Python中返回新的字符串。

Python有一个非常有用特征,就是搜集(或称容器)类型的概念。一般的说,搜集是以一种易于引用或索引的方式,包含其他对象的对象。Python的搜集类型包括了序列映射集合,Python提供了广泛的搜集操纵能力,比如内建包含检查和通用迭代器协议

列表动态数组)、元组字符串是序列类型。所有序列类型都有位置索引,并且除了字符串,都可以包含任意类型的对象,在同一个序列中可以包括多种类型的对象。字符串和元组是不可变的,使得它们成为字典的键的完美候选者。列表是可变的,元素可以被插入、删除、修改、添加或就地排序。

字典是无次序的映射类型,它将一组不可变的键,映射到相应的元素上。在字典中的键,必须是不可变的Python类型,比如整数或字符串,因为在底层它们是通过散列函数实现的。Template:Le是无次序的类型,它包含唯一性的不可变对象作为元素。有二种类型的集合:可变的set和不可变的frozenset

Python允许编程者使用,定义自己的类型[24]。类的新实例,是通过调用这个类的构造器而创建的,而类型和类都是元类type的实例,元类type更是其自身的实例,这允许了元编程反射。Python支持对类型和类的广泛内省,它们可以被读取和比较。Template:Efn

长期规划是支持Template:Le[109],并且自从Python 3.5,语言的语法允许指定静态类型,但在缺省实现CPython中不检查它们[110]。静态类型检查器mypy,支持编译期类型检查[111]

Python 3内建类型举要
类型 可变性 描述 语法例子
bool 不可变 布尔值,有表示值FalseTrue的两个对象。作为整数类型的子类型,除了在转换成字符串时转换为"False""True"之外,它们在几乎所有上下文中表现得如同01 Template:Code
Template:Code
int 不可变 整数,其大小在理论上无限制,实际上受限于内存[112] Template:Code
float 不可变 双精度浮点数,确切精度依赖于机器。一般实现为IEEE 754标准binary64浮点数,它有53个二进制有效数位精度[113] Template:Code
complex 不可变 复数,即分别表示实部与虚部的两个双精度浮点数的有序对 Template:Code
range 不可变 数的序列,通常用在for循环中指定循环次数[114] Template:Code
Template:Code
str 不可变 字符串,即Unicode代码点序列[115]。其代码点都在区间[\u0000, \uffff][\U00010000, \U0010ffff]之内。 Template:Code
"""Spanning
multiple lines"""
bytes 不可变 字节序列,其项目是8位字节,可以用区间[0x00, 0xff]的整数表示。 Template:Code
Template:Code
bytearray 可变 Template:Code
Template:Code
list 可变 列表,可以包含任意的Python对象。 Template:Code
Template:Code
tuple 不可变 元组,可以包含任意的Python对象。 Template:Code
Template:Code
dict 可变 字典键-值对搜集。键在其生存期间是不可变的(称其为可散列的),列表、字典或其它可变对象和包含它们的对象不可以用作键。 Template:Code
Template:Code
set 可变 无序的Template:Le,包含唯一性的不可变的对象,它们不能用任何下标来索引。 Template:Code
Template:Code
frozenset 不可变 Template:Code
types.EllipsisType 不可变 这个类型的值是有一个单一对象,它表示为Template:Le...或内建名字Ellipsis,它的真值为真。它用于NumPy多维阵列索引[116] Template:Code
Template:Code
types.NoneType 不可变 这个类型的值是一个单一对象None(相当于其他语言的Null[117],它被用来指示值的缺席,它的真值为假。 Template:Code
types.NotImplementedType 不可变 这个类型的值是一个单一对象NotImplemented,数值方法和丰富比较方法如果没有实现在所提供运算元上的这个运算则应当返回这个值,它不应该在布尔值上下文中求值。 Template:Code

除了各种数据类型,Python解释器还内建了很多其他类型,包括可调用类型:用户定义函数、实例方法、生成器函数、协程函数、异步生成器函数、内建函数、内建方法、类、类方法;模块,定制类,类实例,I/O对象(也叫做文件对象),和暴露给用户的一些内部类型:代码对象、框架对象、溯回对象、切片对象、静态方法对象、类方法对象。

函数[编辑]

Python的函数支持闭包[118]和其他头等函数特征Template:Efn,并支持限制最大深度的递归Template:Efn, 它不支持函数重载即不能创建具有相同名字而有不同实现的多个函数,但其标准库可支持单一分派泛化函数[119]。Python的函数作为头等对象,具有和普通对象平等的地位。Python官方实现不提供尾调用优化头等续体,吉多·范罗苏姆曾声称他不会对其加以支持[120],有第三方库支持Template:Le[121]

在Python中,函数调用的实际参数与函数定义的形式参数之间的结合,所传递的是“对象引用”,函数在被调用之时,所给予的实际参数被介入到一个局部符号表中,实际参数使用传值调用来传递,而这个值总是对象引用,并非这个对象的值[122]。如果形式参数绑定到一个可变对象,则通过形式参数对此对象内容的修改,在函数外也是可见的。如果形式参数绑定到一个不可变对象,则通过形式参数不能修改此对象内容,但可以把形式参数重新绑定到其它对象上,这并不影响函数外的对象的值。Template:Efn

Python在函数定义时,可以在形式参数序列中,以形式参数=的样式指定形式参数缺省值。在函数调用时可以省略有缺省值的形式参数,这时这个缺省值就被代入到它的位置中。在这个函数定义被执行之时,从左至右的求值作为形式参数的缺省值的这些表达式。这意味着这种表达式在这个函数被定义之后只被求值一次,而每次函数调用之时都使用相同的“预先计算”的值。Template:Efn

Python在函数调用中,可以给予位置实际参数和关键字实际参数。实际参数可以如同C语言那样,按照位置与函数定义的形式参数匹配;也可以采用关键字实际参数,即形式参数=样式的实际参数。Python在函数定义中,可以使用不对应实际参数的特殊形式参数/*,将形式参数序列分为三部分:唯位置形式参数、可位置可关键字形式参数和唯关键字形式参数。如果一个形式参数有缺省值,则在其后直到*之前的所有形式参数也都必须有缺省值。Template:Efn

在函数定义中的位置形式参数序列和关键字形式参数序列,可以分别在其末尾有*args**kwargs这样的加了前缀***的形式参数,它们捕获在函数调用时提供的,超出形式参数序列规定而无所对应的多个实际参数;在形式参数args前加*号,则args元组类型,它捕获可变数目的位置实际参数;在形式参数kwargs前加**号,则kwargs字典类型,它捕获可变数目的关键字实际参数。Template:Efn

在函数调用的实际参数序列中,关键字实际参数必须出现在位置实际参数之后。如果要传递给一个函数的一些位置实际参数,已经在一个序列类型如列表或元组的对象中,则可以在函数调用中给它前缀*来进行可迭代解包;如果要传递的一些关键字实际参数已经在字典对象中,则可以给它加**号来进行字典解包。

在函数定义头部之后可以插入“文档字符串”,用作函数的使用帮助,它可以使用内置函数help()打印出来。自从Python 3.0,函数定义可以对形式参数与返回值增加类型标注[123]。自从Python 3.5,开始支持类型提示[110]

Python的修饰器(decorator)可用来修改任何可调用Python对象,其用法是将已定义的对象比如函数、方法或类定义传递给修饰器,再将它所返回的修改后的对象绑定到原来对象的名字。修饰器可用于元编程,其用途至少包括:建立类方法静态方法,设置先决条件后置条件、实现多方法记忆化[124]。 Python使用@作为关键字形成修饰符,它是用来应用修饰器的语法糖Template:Efn 通过在毗连的行上放置多个修饰符,多个修饰器可以链接起来应用。Template:Efn

对象及其方法[编辑]

Python支持大多数面向对象编程技术。在Python中所有东西都是对象,包括数、函数、模块。它允许多态性,不限定于在Template:Le之内子类型方式,而是采用了鸭子类型方式[125],就是说针对变量的方法调用和特性(attribute)访问,不事先限制这个的变量的类型,它可被绑定到任何对象。Python的继承支持多重继承,这可以用来实现混入。Python支持元类[126],还支持抽象基类[127],自从Python 3.6,提供了定制化类创建的简单机制[128]

对象方法,是附属于这个对象的的函数。对于正常的方法和函数,语法实例.方法(实际参数),是.方法(实例, 实际参数)语法糖。Python不提供其他一些面向对象编程语言比如C++Java中的隐式的Template:Le关键字[129],Python的对象方法沿袭自Modula-3,使用显式的第一个形式参数来访问实例特性,习惯上将其命名为Template:LeTemplate:Efn

Python支持一些名字以__开始和结束的特殊方法,它们用于实现实现多种特殊功能[47],尤其是实例初始化,在一个类中定义__init__(),它在实例创建后返回给调用者之前被调用,所给予的实际参数就是传递给对象构造器表达式的那些实际参数。某些特殊方法可以实现运算符重载,比如在一个类中定义__add__(),将允许在这个类的实例上使用+算符。

在Python中,对象的特殊特性__dict__,是存储其所有(可写)特性的字典[130]。在一个类中的类变量__slots__,可以被赋值为变量名字序列,它为所声明的这些变量在类实例对象中保留空间,并阻止其自动建立__dict__[131]Template:Efn

在Python中,定义了一个或多个特殊方法__get__()__set__()__delete__()的类,可以用作描述器(descriptor)[132]。在类的定义中,如果一个成员若是另一个描述器类的实例,则它被称为这个类的属性(property),使用与特性(attribute)访问相同的语法,访问这个类的实例对象中的属性。Template:Efn

在Python中,不强制采用访问子变异子方法,来访问对象的数据成员。Python使用名字修饰,有限的支持私有变量[72]。Python的property内建函数和@property修饰符,将一个类中特殊定义的访问某个特性的那些方法,包装成的这个类的一个属性[133]Template:Efn

Python允许通过使用@classmethod@staticmethod修饰符,来分别建立类方法静态方法[29]。在方法调用之时,类方法接收这个类的作为其隐式的第一个实际参数,而静态方法不接收隐式的第一个实际参数。Template:Efn

Python不提供隐式的super关键字而是提供了super()内建函数,在一个类的方法中调用此函数返回一个代理(proxy)对象,它为了在类层级内这个类所有基类中查找实现了特定方法的基类,确定了优先次序即方法决定次序(MRO),次序居前的基类优先于位居其后的它的父辈类或平辈类[134]。当一个子类的方法覆盖了其超类方法的时候,可通过调用super().方法,将这个方法调用委托给与子类的self.方法同名的超类方法。Template:Efn

标准库[编辑]

Python拥有一个强大的标准库[135]。Python标准库包括了如下功能: Template:Div col

Template:Div col end

程序代码实例[编辑]

一个在标准输出设备上输出Hello World的简单程式通常被作为开始学习程式语言时的第一个程式。可将如下代码录入纯文本文件并命名(如program01.py),然后执行这个命令python3 program01.py以执行该程序:

print("Hello, world!")

Python也可以单步直译执行。执行Python直译器进入互动式命令列的环境后,你可以在提示符号>>>旁输入print("Hello, world!"),按Enter键输出结果:

>>> print('Hello, world!')
Hello, world!

计算非负整数的阶乘的程序代码:

n = int(input('輸入一個數,就會印出其階乘: '))
if n < 0:
    raise ValueError('錯誤,請輸入一個非負整數')
fact = 1
for i in range(2, n + 1):
    fact *= i
print(fact)

注意:在Python 3.0及以上版本中,print是个函数,需要在要打印的参数前后加上圆括号;在Python 2.x版本中,print是一个关键字而可以不加圆括号。

实现[编辑]

Python是一门跨平台的脚本语言,Python规定了一个Python语法规则,根据该规则可编写Python直译器[136]。Python属于动态语言,其官方实现CPython将Python程序编译成中间形式的字节码[137],并接着在它的虚拟机上执行[138],运行速度缓慢于C/C++所编译出的机器码和在HotSpot JVM上运行的java字节码[139]

活跃开发的实现

Template:Div col

  • CPython:官方的Python直译器,需要区别于其他直译器的时候才以CPython称呼。CPython默认采用全局解释器锁(GIL),以确保在任何时刻只有一个线程执行Python字节码;一些扩展模块被设计为在进行计算密集任务时释放GIL,还有在进行I/O时总是释放GIL[140]
  • MicroPython:为微控制器而优化的Python 3变体,它实现了完整的Python 3.4语法,和补充自版本3.5的async/await关键字,以及后来版本的一些选定特征;它提供了实现Python标准库模块功能子集的内建模块,和特定于微控制器的一些模块。Template:LeTemplate:Le开发的MicroPython分叉。
  • PyPy:采用了Template:Le的Python实现,缺省支持stackless模态[141],它是用RPython编写的,当前支持Python版本3.11和2.7。
  • Numba:使用LLVM JIT的Python优化编译器,它将包括很多NumPy函数的聚焦数值计算的Python子集,转译成快速的机器码,它为在CPU和GPU上并行化Python代码提供了大量选项。
  • Codon:高性能且无运行时开销的Python编译器[142],它将Python代码编译成本机机器代码,并且支持本机多线程和GPU并行运算,还包括了特征齐全的完全编译的内建NumPy实现。它由MIT CSAIL的研究人员开发[143],其语义在数据类型等方面上与CPython有所不同[144]
  • Pyodide:基于WebAssembly/Emscripten的用于浏览器Node.js的Python发布[145],支持任何在PyPIwheel形式的纯Python包,并且已经移植了很多具有C语言扩展的包。
  • RustPython:用Rust编写的Python解释器[146],它可以嵌入到Rust应用程序中从而将Python用作脚本语言,还可以被编译成WebAssembly从而在浏览器中运行Python代码。
  • Brython:用JavaScript编写的在浏览器中运行的Python实现[147],具有到DOM元素和事件的接口。
  • GraalPy:针对JVM的基于Template:Le的Python高性能实现[148]

Template:Div col end

转译成其他语言的编译器

Template:Div col

  • Cython:将增加了静态类型声明的Python超集编译成CC++的编译器。Cython补充支持调用C语言函数并且在变量和类特性上声明C语言类型,还支持以OpenMP为后端的本机多线程并行[149]
  • mypyc:将Python模块编译成C扩展的编译器[150],它使用标准的Python类型提示生成快速代码。mypyc是mypy发行的可选依赖,它使用mypy进行类型检查类型推论[111]
  • Template:Le:用Python编写的到C11(或替补为C++03)的编译器[151],它将Python模块转译成使用CPython的libpython共享库和自己的静态C文件的C层级程序,接着将其编译成本机机器代码。
  • Template:Le:将纯粹但隐含为静态类型的Python有限子集代码转译成优化的C++代码的编译器[152],它可以生成独立程序或者能导入其他Python程序的扩展模块。
  • Pythran:将聚焦于科学计算的Python子集编译成C++11Template:Le[153],它依赖于Boost和xsimd库,将标注了接口描述的Python模块编译为本机共享库模块,能利用上多核SIMD指令单元。
  • Transcrypt:用Python编写的Python 3.9到JavaScript编译器[154],用于在浏览器中运行Python代码,它被预先编译为高可读性且高效的JavaScript代码。
  • Template:Le:将Python编译成VerilogVHDL[155]

Template:Div col end

其他实现举例:Cinder,它是Meta孵化器发布的面向性能的CPython分叉[156]Jython,它是用Java实现的Python 2.7。IronPython,它基于DLR之上的Python 2.7和Python 3.4实现。Stackless Python,它是实现Template:Le的CPython 3.8分叉。Pyston,它是具有JIT等性能优化的CPython 3.8.12的分叉[157]。Pyjion,将Python代码编译成本机CIL的CPython 3.10的JIT扩展[158]。Grumpy,它是Python 2.7到Go的转译器和运行时系统[159]。py2many,将Python转译成多种语言如C++17RustGoJulia等的转译器[160]

开发环境[编辑]

通用文本编辑器[编辑]

很多并非集成开发环境软件的文本编辑器,也对Python有不同程度的支持,并且加上专门为Python设计的编辑器插件也会有很高的可用性。 Template:Div col

Template:Div col end

专用开发环境[编辑]

适用于Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他选择。其中有些软件设计有语法着色、语法检查、运行调试、自动补全、智能感知等便利功能。由于Python的跨平台出身,这些软件往往也具备各种操作系统的版本或一定的移植性。 Template:Div col

  • IDLE:Python“标准”IDE,一般随Python而安装,支持较少的编辑功能,调试功能也比较弱。
  • Eric:基于PyQt的自由的IDE,支持自动补全、智能感知、自动语法检查、工程管理、svn/mercurial集成、自动单元测试等功能,具有可扩展的插件系统,通过可选插件支持Git集成。调试功能与Visual Studio和Eclipse类似。
  • Spyder:开源的跨平台科学计算IDE。
  • PyCharm:由JetBrains公司出品,具备一般IDE的功能,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等,另外,它还提供了一些功能用于Django开发,还支持IronPython。它是商业软件,但也具有社区版和教育版。

Template:Div col end

第三方扩展包[编辑]

File:Python Powered.png
Python Powered

脚本错误:没有“main”这个模块。 Python社群提供了大量的功能覆盖众多领域的第三方模组,其使用方式与标准库类似。第三方模块可以使用Python/Cython或者C语言编写。软件工具比如SWIG,通过定义接口文件或规定文件的方式,可以将C/C++编写的程序库包装为Python模块。Python解释器本身也可以被集成到其它需要脚本语言的程式内。

Python包索引是公开的软件包在线仓库。pip是官网推荐的以安全方式安装Python应用及其依赖软件包的最流行工具[161]。要安装在整个操作系统范围内共享的Python包,现在需要通过操作系统的软件包管理系统。为了将特定于应用的依赖包隔离于共享的Python安装,需要创建虚拟环境,这可以使用标准库的venv[162],或第三方工具比如virtualenv[163]和pipenv[164]

网络编程[编辑]

Python标准库对于各种网络协定的支援很完善,因此适用于编写服务器软件、网络爬虫等Web开发。Python定义了WSGI标准应用接口,来协调HTTP服务器与基于Python的Web程式之间的沟通。比如,通过Template:Link-en模组,Apache HTTP Server可以运行用Python编写的Web程式。

用Python编写的一些Web框架,有助于轻松地开发和管理复杂的Web程式。重要的第三方Template:Le库和Web框架有: Template:Div col

  • Zope:著名的开源Web应用服务器
  • Beautiful Soup:用作HTML/XML解析器的一个简单易用Python包。
  • Twisted事件驱动的网络编程框架,它支持很多常见的网络协议并包括了很多不同用途的模块,它支持所有主要的系统事件循环和各种GUI事件循环。
  • Django:MTV架构[165]的Web框架,它注重组件的重用性和“可插拔性”、快速开发DRY法则
  • Tornado:使用单线程事件循环的异步非阻塞式web服务器,也是轻量级的Web框架。
  • Flask:微Web框架,不要求特定的工具或库。
  • Requests:适合于常人使用的HTTP库,封装了许多繁琐的HTTP功能,极大地简化了HTTP请求所需要的代码量。
  • aiohttp:基于asyncio的HTTP客户端和服务器二者[166]
  • uvloop:对内建asyncio事件循环的快速的、直截了当的替代者[167],它用Cython实现并在底层使用了libuv
  • Template:Le:用于实现基于HTTP的网络服务API的现代高性能web框架[168]
  • PyScript:创建在浏览器内的Python应用的框架[169],可采用Pyodide、MicroPythonWebAssembly和当代Web技术。

Template:Div col end

图形用户界面[编辑]

Python本身包含了Tkinter库,它是Python的业界标准GUI并被集成进入了IDLE。Tkinter基于了Tcl命令工具,能够支持简单的GUI开发。但是为了让所开发的软件运行速度更快,并与用户的桌面环境更契合,人们一般会选择采用第三方GUI库或框架。主要的第三方GUI库有: Template:Div col

  • PyQtQt的Python绑定库,由Riverbank Computing公司自从1998年发行,采用GPL许可证或商业许可证。
  • PySideQt的Python绑定库,由Qt公司自从2009年发行,采用LGPL许可证。
  • PyGObject:替代了PyGTK,它是为Python程序访问基于GObject的库而提供的包装库[170],GObject是GTKTemplate:LeGStreamer等库使用的对象系统。
  • Kivy:用于开发多点触控应用软件的开源Python库,采用了自然用户界面(NUI)。
  • WxPython:GUI编程框架wxWidgets的Python包装库
  • Gooey:将几乎所有Python 3控制台程序用一行代码转变成GUI应用[171]
  • Dear PyGui:快速而强力的具有极小依赖性的GUI工具箱[172]
  • pywebview:轻量级跨平台的对Template:Le构件的包装器,允许在其本地GUI窗口中显示HTML内容[173]

Template:Div col end

数据科学[编辑]

重要的数据科学用第三方软件库有: Template:Div col

Template:Div col end

数据可视化[编辑]

主要的数据可视化软件库及仪表板框架有[179]Template:Div col

Template:Div col end

机器学习[编辑]

基础性的机器学习软件库及框架有: Template:Div col

Template:Div col end

其它种类[编辑]

Template:Div col

Template:Div col end

应用[编辑]

在很多操作系统里,Python是标准的系统元件,它被列入了ISO/IEC 23360-1-4:2021 Linux标准规范(LSB)之语言规定[223]。大多数Linux发行版macOS都集成了Python,可以在终端模拟器Template:Le下直接执行Python。第三方工具pipx,可以将Python应用安装于隔离的环境中并在其中运行它[224]

虽然Python可被粗略地分类为脚本语言,Python的支持者较喜欢称它为一种高阶动态语言,常像“胶水”一样被用来连接软件组件,已经显著的区别于Unix shellWindows PowerShell这样的语言。基于Python的xonsh,是跨平台的、青睐Unix的shell语言命令行界面[225]

应用程序[编辑]

一些Linux发行版,使用Python语言编写安装器,比如UbuntuUbiquityFedoraAnaconda;或使用它编写软件包管理系统,比如GentooPortage。下面举例使用Python编写或将它作为嵌入式脚本的一些应用程序: Template:Div col

Template:Div col end

人工智能[编辑]

经由Python开发了众多的人工智能模型和作为其支撑的软件库: Template:Div col

Template:Div col end

社群流行[编辑]

自从2003年,Python始终排行于Template:Le前十最流行编程语言,在2021年10月它首次达到了第一名最流行语言(居于CJava之前),并被选为2007年、2010年、2018年、2020年、2021年和2024年的年度编程语言[7]。它有如下著名的社群: Template:Div col

  • PyCon:各地社群举办的会议,通常每年举办。各社群在会议中讨论Python相关的议题。
  • Python Discord:参与者众多的Python社区[236]
  • Template:Link-en:由女性社群发起的社群,主要注重于发展Python的女性程式设计社群。
  • Template:Le:使用Django网页设计框架,推广使用Python进行网页设计的技术。

Template:Div col end

影响的语言[编辑]

Python的设计和哲学已经影响了很多其他编程语言,例如: Template:Div col

Template:Div col end 此外还有:Boo[244]Template:Le[245]CoffeeScript[246]GDScript[247]Template:Le[248]Template:Le[249]等等。

在Python基础上开发的编程语言有: Template:Div col

  • Taichi Lang:采用同Python几乎一样语法的指令式并行编程语言[250],源出自MIT CSAIL实验室,它嵌入在Python之中并使用即时编译器框架如LLVM,将计算密集的Python代码转变成本机GPU或CPU指令。
  • Coconut:在Python语法之上增加了用于函数式编程的新特征的Python变体[251]
  • Snek:受Python启发的微小的可嵌入式语言,其目标处理器仅有数以kB计的闪存静态内存[252]
  • Pycopy:Template:Le[253]、轻量级且可扩展的MicroPython兼容语言实现[254]
  • Mojo:基于Template:Le并设计为Python超集的语言[255]
  • Hy:嵌入到Python中的Lisp方言,它将Lisp代码变换成Python抽象语法树对象,从而以Lisp形式操控全部Python库。

Template:Div col end

示例与注释[编辑]

引用[编辑]

  1. 1.0 1.1 Template:Cite web
  2. Template:Cite web
  3. Template:Cite web
  4. Template:Cite web
  5. Template:Cite web
  6. Template:Cite web
  7. 7.0 7.1 Template:Cite web
  8. Template:Cite web
  9. Template:Cite web
  10. Template:Cite web
  11. 11.0 11.1 Template:Cite web
  12. Template:Cite web
  13. Template:Cite news
  14. Template:Cite news
  15. Template:Cite web
  16. Template:Cite web
  17. Template:Cite web
    Template:Cite web
  18. Template:Cite web
  19. Template:Cite web
  20. Template:Cite web
  21. Template:Cite web
  22. Template:Cite web
  23. Template:Cite web
  24. 24.0 24.1 Template:Cite web
  25. Template:Cite web
  26. Template:Cite web
  27. Template:Cite web
  28. 引用错误:<ref>标签无效;未给name(名称)为mro的ref(参考)提供文本
  29. 29.0 29.1 Template:Cite web
  30. Template:Cite web
  31. Template:Cite web
  32. Template:Cite web
  33. Template:Cite web
  34. Template:Cite web
  35. 35.0 35.1 Template:Cite web
  36. Template:Cite web
  37. Template:Cite web
    Template:Cite web
  38. Template:Cite web
  39. Template:Cite web
  40. Template:Cite web
    Template:Cite web
  41. Template:Cite web
  42. Template:Cite web
  43. Template:Cite web
  44. Template:Cite web
  45. Template:Cite web
  46. Template:Cite web
  47. 47.0 47.1 Template:Cite web
  48. Template:Cite web
  49. Template:Cite web
  50. Template:Cite web
  51. Template:Cite web
  52. Template:Cite web
  53. Template:Cite web
  54. Template:Cite web
  55. Template:Cite web
  56. Template:Cite web
  57. Template:Cite web
  58. Template:Cite web
  59. Template:Cite web
    Template:Cite web
  60. Template:Cite web
  61. 61.0 61.1 Template:Cite web
  62. Template:Cite web
  63. Template:Cite web
  64. Template:Cite web
  65. Template:Cite web
  66. Template:Cite web
  67. Template:Cite web
  68. Template:Cite web
  69. Template:Cite web
  70. Template:Cite web
  71. Template:Cite web
  72. 72.0 72.1 Template:Cite web
  73. Template:Cite web
  74. Template:Cite web
  75. Template:Cite web
  76. Template:Cite web
  77. Template:Cite web
  78. Template:Cite web
  79. Template:Cite web
  80. 80.0 80.1 Template:Cite web
  81. 81.0 81.1 Template:Cite web
  82. Template:Cite web
  83. Template:Cite web
  84. Template:Cite web
  85. 85.0 85.1 85.2 85.3 Template:Cite web
  86. Template:Cite web
  87. Template:Cite web
  88. Template:Cite web
  89. Template:Cite web
  90. Template:Cite web
  91. Template:Cite web
  92. Template:Cite web
  93. Template:Cite web
  94. Template:Cite web
  95. Template:Cite web
  96. Template:Cite web
  97. 脚本错误:没有“citation/CS1”这个模块。
  98. Template:Cite web
  99. Template:Cite web
  100. Template:Cite web
  101. Template:Cite web
  102. Template:Cite web
  103. Template:Cite web
  104. Template:Cite web
    Template:Cite web
  105. Template:Cite web
  106. Template:Cite web
  107. Template:Cite web
  108. Template:Cite web
  109. Template:Cite web
  110. 110.0 110.1 Template:Cite web
  111. 111.0 111.1 Template:Cite web
  112. Template:Cite web
  113. Template:Cite web
  114. Template:Cite web
  115. Template:Cite web
  116. Template:Cite web
  117. Template:Cite web
  118. Template:Cite web
  119. Template:Cite web
  120. Template:Cite web
    Template:Cite web
  121. Template:Cite web
  122. Template:Cite web
  123. Template:Cite web
  124. Template:Cite web
  125. Template:Cite web
  126. Template:Cite web
  127. Template:Cite web
  128. Template:Cite web
    Template:Cite web
  129. Template:Cite web
  130. Template:Cite web
  131. Template:Cite web
  132. Template:Cite web
  133. Template:Cite web
  134. Template:Cite web
  135. Template:Cite web
  136. Template:Cite web
  137. Template:Cite web
    Template:Cite web
  138. Template:Cite web Template:Cite web Template:Cite web
  139. Template:Cite web
  140. Template:Cite web
  141. Template:Cite web
  142. Template:Cite web
  143. Template:Cite web
  144. Template:Cite web
  145. Template:Cite web
  146. Template:Cite web
  147. Template:Cite web
  148. Template:Cite web
  149. Template:Cite web
  150. Template:Cite web
  151. Template:Cite web
  152. Template:Cite web
  153. Template:Cite web
  154. Template:Cite web
  155. Template:Cite web
  156. Template:Cite web
  157. Template:Cite web
  158. Template:Cite web
  159. Template:Cite web
  160. Template:Cite web
  161. Template:Cite web
  162. Template:Cite web
  163. Template:Cite web
  164. Template:Cite web
  165. Template:Cite web
  166. Template:Cite web
  167. Template:Cite web
  168. Template:Cite web
  169. Template:Cite web
  170. Template:Cite web
  171. Template:Cite web
  172. Template:Cite web
  173. Template:Cite web
  174. Template:Cite web
  175. Template:Cite web
  176. Template:Cite web
  177. Template:Cite web
  178. Template:Cite web
  179. Template:Cite web
  180. Template:Cite web
  181. Template:Cite web
  182. Template:Cite web
  183. Template:Cite web
  184. Template:Cite web
  185. Template:Cite web
  186. Template:Cite web
  187. Template:Cite web
  188. Template:Cite web
  189. Template:Cite web
  190. Template:Cite web
  191. Template:Cite web
  192. Template:Cite web
  193. Template:Cite web
  194. Template:Cite web
  195. Template:Cite web
  196. Template:Cite web
  197. Template:Cite web
  198. Template:Cite web
  199. Template:Cite web
  200. Template:Cite web
    Template:Cite web
    Template:Cite web
  201. Template:Cite web
  202. Template:Cite web
  203. Template:Cite web
  204. Template:Cite web
  205. Template:Cite web
  206. Template:Cite web
  207. Template:Cite web
  208. Template:Cite web
  209. Template:Cite-web
  210. Template:Cite web
  211. Template:Cite web
  212. Template:Cite web
  213. Template:Cite web
  214. Template:Cite web
  215. Template:Cite web
  216. Template:Cite web
  217. Template:Cite web
  218. Template:Cite web
  219. Template:Cite web
  220. Template:Cite web
  221. Template:Cite web
  222. Template:Cite web
  223. Template:Cite web
  224. Template:Cite web
  225. Template:Cite web
  226. Template:Cite web
  227. Template:Cite web
  228. Template:Cite web
  229. Template:Cite web
  230. Template:Cite web
  231. Template:Cite web
  232. Template:Cite web
  233. Template:Cite web
  234. Python library for easily interacting with trained machine learning models https://pypi.org/project/gradio/ Template:Wayback
  235. Template:Cite web
  236. Template:Cite web
  237. Template:Cite web
  238. Template:Cite web
  239. Template:Cite web
  240. Template:Cite web
  241. Template:Cite web
  242. Template:Cite book
  243. 引用错误:<ref>标签无效;未给name(名称)为lattner2014的ref(参考)提供文本
  244. Template:Cite web
  245. Template:Cite web
  246. 引用错误:<ref>标签无效;未给name(名称)为edemaine的ref(参考)提供文本
  247. Template:Cite web
  248. Template:Cite web
  249. 引用错误:<ref>标签无效;未给name(名称)为vpeople的ref(参考)提供文本
  250. Template:Cite web
  251. Template:Cite web
  252. Template:Cite web
  253. Template:Cite web
  254. Template:Cite web
  255. 引用错误:<ref>标签无效;未给name(名称)为Mojo的ref(参考)提供文本

延伸阅读[编辑]

Template:Refbegin

Template:Refend

参阅[编辑]

脚本错误:没有“Portal”这个模块。 Template:Div col

Template:Div col end

外部连接[编辑]

脚本错误:没有“Sister project links”这个模块。Template:Main other Template:Div col

Template:Div col end

Template:Python 脚本错误:没有“Navbox”这个模块。 Template:Python web frameworks Template:SciPy ecosystem Template:Differentiable computing Template:Package management systems Template:FOSS