logo
天地变化的道理
使用率很高网站
生活要常常分享
您身边百科全书
免费为您秀产品
Python
Python Python(;),是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。它的语言结构以及面向对象的方法,旨在帮助程序员为小型的和大型的项目编写逻辑清晰的代码。 吉多·范罗苏姆于1980年代后期开始研发Python,作为ABC语言的后继者,它也可以被视为采用了叫做的中缀表示法的一种LISP方言。吉多·范罗苏姆于1991年首次发布 Python 0.9.0。Python 2.0于2000 年发布并引入了新功能。Python 3.0于2008年发布,它是该语言的主要修订版,并非完全向后兼容。Python 2于2020年随2.7.18版停止支持。 Python的设计哲学,强调代码的可读性和简洁的语法,尤其是使用空格缩进来划分代码块。相比于C语言或Java,Python让开发者能够用更少的代码表达想法。 Python解释器本身几乎可以在所有的操作系统中运行,它的官方直译器CPython是用C语言编写的。Python是一个由社群驱动的自由软件,目前由Python软件基金会管理。Python是最受欢迎的编程语言之一。 历史. Python的创始人吉多·范罗苏姆,在1982年至1995年间,参与了荷兰数学和计算机科学研究学会多个项目的工作。1989年的圣诞节期间,他决心开发一个新的脚本解释程式,作为ABC语言的继承者,并且用它替代Unix shell和C语言来进行系统管理,担负与之间的交互操作并进行例外处理。他是BBC电视剧《Monty Python的飞行马戏团》的爱好者,所以选取了Python作为这个编程语言的名字。范罗苏姆作为Python的主要开发者,独自担负这个项目的发展决策者职责,直到2018年7月12日,他宣布从终身仁慈独裁者(BDFL)的职位上“永久休假”。他在2019年1月至11月参与了第一届五人掌控委员会继续领导项目发展。 在1991年2月,范罗苏姆在alt.sources上发布了最初代码(标记为版本0.9.0),这时就已经存在了带继承的类、例外处理、函数和核心类型codice_1、codice_2、codice_3等。在这个最初发行中就有了从Modula-3引进的模块系统,和例外处理机制。在1994年1月,Python达到了版本1.0,其主要新特征是由Amrit Prem提供的函数式编程工具codice_4、codice_5、codice_6和codice_7。受Modula-3启发,Python 1.1介入了缺省参数值,Python 1.3介入了。Python 1.4介入了对复数的内建支持,还包含了采取名字修饰的一种基本形式的。 在2000年10月,Python 2.0发布,它介入了列表推导式,这是从函数式编程语言Haskell中引进的;它支持了Unicode,还向垃圾回收系统增加了环检测算法。Python 2.1支持了静态嵌套作用域。Python 2.2进行了重大革新,将Python中用C语言写成的类型,和用Python语言写成的类,统一成在同一个层级中,使得Python的对象模型成为纯粹而一致的对象模型;还介入了迭代器,受CLU和Icon启发的生成器,和描述器协议。Python 2.3介入了从Dylan引进的方法解析次序。Python 2.4介入了类型,和函数修饰器。Python 2.5介入了codice_8语句,并在官方实现中介入了抽象语法树。 在2008年12月,Python 3.0发布,它对语言做了较大修订而不能完全后向兼容。Python 3发行包括了codice_9实用工具,它(至少部份的)自动将Python 2代码转换成Python 3代码。Python 3.4介入了异步I/O模块。Python 3.5介入了类型提示,和采用async/await语法的协程。Python 3.8介入了赋值表达式。Python 3.9介入了内建的针对容器类的泛化别名(codice_10)类型,并在官方实现中介入了新的语法解析器。Python 3.10介入了结构式模式匹配,和内建的联合类型(codice_11)。Python 3.11对官方实现进行了优化提速,并介入了codice_12子句。Python 3.12介入了类型参数语法和codice_13语句,并废弃或移除了一些过时的模块和功能。 Python 2.7的产品寿命结束日期最初设定为2015年,由于大量现存代码不能移植到Python 3,而延期支持至2020年。当前只有Python 3的稳定版本3.11和3.12与预览版本3.13正在被完全支持,但仍提供对3.8、3.9和3.10版本的安全性修正。 在2023年12月,活跃的Python核心开发者,选举Pablo Galindo Salgado、Gregory P. Smith、Barry Warsaw、Emily Morehouse和Thomas Wouters,为2024年度“掌控委员会”的五位成员来领导这个项目。 特征与设计哲学. Python是多范型编程语言。它完全支持结构化编程和面向对象编程,还有很多特征支持函数式编程和元编程比如元对象协议(元类和魔术方法)。通过扩展还可以支持很多范型,包括面向方面编程、契约式设计和逻辑编程。 Python使用动态类型,在内存管理上采用引用计数和环检测相结合的垃圾回收器。它的特征还有动态名字解析(),即在程序执行期间绑定方法和变量的名字。 Python对遵循LISP传统的函数式编程提供了有限的支持,它提供了 codice_5、codice_6和codice_7函数;列表推导式、字典、和生成器表达式。标准库中的模组codice_17和codice_18,实现了从Haskell和Standard ML借鉴来的函数式工具。 Python的设计理念是“优雅”、“明确”、“简单”,它的一些重要准则被合称为「Python之禅」。在Python解释器内运行codice_19可以获得完整的列表,下面举出其中首要: Python开发者的方法论是“用一种方法,最好是只有一种方法来做一件事”,显著不同于以Perl语言为代表的“不止一种方法去做一件事”风格。Python开发者在设计语言时,如果面临多种选择,一般会选择明确没有或者很少有歧义的语法。 范罗苏姆认为ABC语言非常优美和强大,它没有取得成功的原因是不开放造成的,故而将Python本身设计为可扩充的。Python并不把所有的特性和功能都集成到语言核心,而是提供了丰富的API和工具,以便程式设计师能够轻松地使用Python、C语言、Cython来编写扩充模组。Python还可以通过如标准库中的ctypes等,来提供C语言兼容数据类型,并访问动态链接库或共享库中的函数,从而对用其他语言编写的程式进行集成和封装。 在Python的官方实现CPython中,一般避开不成熟的或者对非重要部位的加快运行速度的优化。在某些对运行速度要求很高的情况,可以使用具备JIT技术的Python实现或安装JIT扩展模块。 语法和语义. Python为了让程式码具备高度的可阅读性,在设计时尽量使用了其它语言常用的符号和英文单字。Python支持使用反斜杠作为行接续符,将多个物理行合成为一个逻辑行。在圆括号、方括号或花括号之中的表达式,可以分裂跨越多于一个物理行而不使用反斜杠,这被称为“隐式行接续”。注释开始于并非一部份的一个井号codice_20,并结束于物理行结尾;注释标示逻辑行的结束,除非已受制于隐式行接续规则;注释在语法上被忽略。简单语句包含在一个单一的逻辑行之内,Python支持使用分号作为分隔符,将多个简单语句合并入语法意义上的一行之中。 Python语法中的复合语句,包含(成组的)其他语句;它们以某种方式影响或控制这些其他语句的执行。Python的复合语句包含一个或多个子句(clause),子句构成自一个头部(header)和一个套件(suite)。特定复合语句的子句头部都在同样的缩排层级上,每个子句头部开始于一个唯一标识关键字,并结束于一个冒号。套件是这个子句所控制的一组语句,套件有两种形式,可以是与头部在同一行上的一个或多个由分号分隔的简单语句,它们跟随在这个头部的冒号之后;或者是在后续诸行上的一个或多个缩排的语句,只有这种套件形式可以包含嵌套的复合语句。 缩排. Python语言遵循越位规则,利用缩排来形成语句套件,即语法意义上的块。连续诸行的缩排层级,被用来生成语法解析器才能见到的codice_21和codice_22记号,二者的作用相当于C语言家族的花括号,或Pascal语言家族的关键字codice_23和codice_24。增加缩排就生成codice_21记号,减少缩排就生成codice_22记号。根据PEP 8的规定,使用4个空格来表示每级缩排。 tab字符(从左至右)被替代为1至8个空格,使得直到tab之前的诸字符加上这些替代空格的字符总数,是8的倍数(这意图同于Unix所用规则)。前导于第一个非空白字符的空格的总数,确定了这一行的缩排层级。缩排所用诸字符,不能使用反斜杠来拆分成多个物理行;直到第一个反斜杠之前的空白确定缩排层级。如果源代码文件混合了tab和空格,并且在这种方式下缩排的意义依赖于一个tab相当于多少个空格,则这种缩排因不一致性而被报错并拒绝。 关键字. Python有如下35个关键字;它们不能用作标识符: 内建常量codice_27、codice_28和codice_29于Python版本3.0中成为关键字,关键字codice_30介入于版本3.0,关键字codice_31和codice_32介入于版本3.5,并在版本3.7中成为正式关键字。 在Python中,将只在特定上下文中保留的标识符,称为“软关键字”: 标识符. 标识符就是名字,在ASCII范围内(U+0001..U+007F),可用于标识符的字符为:大写字母codice_38至codice_39和小写字母codice_40至codice_41,下划线codice_35以及数字codice_43至codice_44,但首字不可以用数字。如下命名约定,是为“保留标识符类”: 在Python文献中经常使用的是而非传统的foo和bar。 语句. Python的语句包括简单语句: 复合语句: 模块是包含Python定义和语句的一个文件,这个文件名字是模块名字附加上后缀codice_108;在一个模块中,模块的名字(作为字符串)可获得为全局变量codice_109的值。内建codice_110函数,返回实现当前模块名字空间的字典。内建codice_111函数,在无参数时,返回在当前局部作用域内的名字列表;在有一个参数时,尝试返回这个对象的有效特性的列表。包(package)是可以包含子模块或递归的子包的模块。包在技术上是具有codice_112特性的Python模块。可以将包视为文件系统上的目录,而将模块视为这种目录中的文件,但是包和模块不必然源自文件系统。 Python程序构造自代码块。代码块是作为一个单元执行的Python程序文本。模块、函数主体和类定义都是块。交互式键入的每个命令都是块。脚本文件和脚本命令是代码块。codice_113是顶层代码运行所在的环境。“顶层代码”是启动运行的首个用户指定Python模块。从命令行使用codice_114参数,作为顶层脚本运行的模块(作为模块codice_113)也是代码块。此时codice_109变量被设置为codice_117,在这个模块中可籍此增加直接运行时候执行的代码。传递给内建函数codice_118和codice_119执行的字符串是代码块。 在Python中赋值所进行的操作,是将一个名字绑定为到一个分立的动态分配的对象的一个引用。名字是通用的引用持有者,它不关联于一个固定的数据类型,但是,一个名字在给定时间,总是被绑定到有一个类型的某个对象上,这就是动态类型的特征。名字的存储位置不“包含”所指示的值,一个共同的值可以赋值给多个名字,一个名字在任何时候,都可以重新绑定到各种不同类型的对象上,包括字符串、过程、具有数据和方法的复杂对象等。 除了在块中出现的每个赋值语句或导入语句之外,下列构造也绑定名字:给函数的形式参数、类定义、函数定义、赋值表达式、在codice_91语句头部中和各种codice_121关键字之后的标识符目标(target),codice_121关键字出现在codice_82语句、codice_8语句、codice_94子句、codice_12子句和结构式模式匹配的codice_121模式之中。如果一个名字绑定在一个块中,它是这个块的局部变量,除非被声明为codice_30或codice_65。如果一个名字绑定在模块层次,它是全局变量;模块代码块的变量,既是局部的也是全局的。如果一个变量使用在一个代码块中,却不定义在这里,它是自由变量。 作用域定义一个名字在一个块中的可见性。如果一个局部变量被定义在一个块中,它的作用域包括这个块。如果这个定义出现在一个函数块中,作用域扩展到在所界定作用域内包含的任何块,除非所包含的块为这个名字介入了不同的绑定。当一个名字在一个代码块之中使用,它采用最近包围作用域来解析。对一个代码块可见的所有这种作用域的集合,叫做这个这个块的“环境”。如果一个名字绑定在一个块中,并且在其中于绑定之前就被使用,会导致一个错误。 如果codice_65语句出现在一个块之中,在这个语句中指定的所有名字,提及在顶层名字空间中这些名字的绑定。名字在顶层名字空间解析,首先查找全局名字空间,即包含这个代码块的模块的名字空间;未果查找内建名字空间,即模块codice_131的名字空间。codice_65语句与在同一个块中的名字绑定运算有同样的作用域。如果一个自由变量的最近包围作用域包含它的一个codice_65语句,这个自由变量被当作全局的。 codice_30语句导致相应的名字,提及在最近包围函数作用域内的先前绑定变量(即)。 表达式. Python中很多与C语言和java类似,而另一些则与之不同。 Python中运算符具有优先级,下表中的运算符按照从最高到最低的次序列出。在相同单元格中运算符具有相同的优先级,它们从左至右结合,除了指数表达式和条件表达式从右至左结合之外: Python提供了序列串接算符codice_135和序列倍增算符codice_137。自从Python 3.9,介入了字典归并算符codice_144和字典更新算符codice_193。 Python的文本序列类型,包括字符串codice_3和字节序列codice_195与codice_196。有多种写法,字符串对象有一个内建格式算符codice_138: 在Python中,在表达式和语句之间的区别是严格强制性的,这对比于语言如Common Lisp、Scheme或Ruby。故而Python中个别构造存在功能重复,比如:列表推导式相当codice_91循环;条件表达式相当codice_87语句;内建函数codice_118相当codice_119,前者用于表达式,后者用于语句。 语句不能成为表达式的一部份,由于列表和其他推导式或lambda表达式,都是表达式,也就不能包含语句。这个限制的一个示例:赋值语句比如codice_224,不能用作条件语句的条件判断表达式的一部份;这能够避免C语言编程中的一个常见错误,即在条件判断时把等于算符codice_151误写为赋值算符codice_62,这不是预期代码却在语法上有效而能通过编译器检查,在Python中这会导致一个语法错误。 函数. Python的函数支持递归和闭包 ,及其他头等函数特征,但不支持函数重载。Python的函数作为头等对象,具有和普通对象平等的地位。Python官方实现不提供尾调用优化或头等续体,吉多·范罗苏姆曾声称永远都不会加以支持,目前只有第三方库支持。 Python可以在函数定义时,于形式参数序列中,指定形式参数缺省值,即以codice_227样式进行一次性初始化。形式参数在初始化之后,保持既有绑定;函数的后续调用,可继续对它进行访问或变更。为有缺省值的形式参数提供实际参数,在函数调用时是可选的。 Python的函数实际参数与形式参数之间的结合,是传递“对象引用”,函数在被调用的时候,给函数调用的实际参数,被介入到一个局部符号表中,实际参数使用传值调用来传递,而这个值总是对象引用,而非这个对象的值。如果形式参数绑定到一个可变的对象,则通过形式参数对此对象内容的修改,在函数外也是可见的。如果形式参数绑定到一个不可变的对象,则通过形式参数是不能修改此对象内容,但可以把形式参数重新绑定到其它对象上,这并不影响函数外的对象的值。 Python支持位置实际参数和关键字实际参数。函数调用时,实际参数可以如同C语言那样,按照位置与形式参数匹配;也可以采用或称为关键字实际参数,即codice_228样式的实际参数。使用不对应实际参数的特殊形式参数codice_140和codice_137,可以将参数序列分为三部份:唯位置参数、可位置可关键字参数和唯关键字参数。有缺省值的形式参数之后,不能跟随无缺省值的可位置形式参数。在一个函数调用的实际参数序列中,关键字实际参数必须出现在位置实际参数之后。 在位置和关键字形式参数序列末尾,可以分别有codice_231或codice_232这样的形式参数,它们对应于在函数调用时提供的,超出形式参数序列规定而无所对应的多个实际参数;在形式参数名字前加一个codice_137号,该形式参数codice_234是codice_235类型,对应可变数目的位置实际参数;在形式参数名字前加codice_141号,该形式参数codice_237是codice_2类型,对应可变数目的关键字实际参数。如果位置实际参数已经在一个序列类型如列表或元组的对象中,在引用它的变量前加一个codice_137号传递给函数,则其中所有元素解包为多个位置实际参数;如果关键字实际参数在字典中,则加codice_141号来传递给函数。 修饰器(decorator)可用来修改一个函数、方法或类定义的任何可调用Python对象。将已定义的原来对象传递给修饰器,它返回一个修改后的对象,接着把它绑定到在定义中那个名字。Python修饰器部份受到Java注解的影响,而有类似的语法;修饰器语法是纯粹的语法糖,使用codice_142作为关键字形成修饰符。修饰器是一种形式的元编程,它们增强它们所修饰的函数或方法的行动。 多个修饰器可以链接起来,通过在毗连的行上放置多个修饰符,或者使用中间变量。 函数修饰器的正规用法包括:用来建立类方法或静态方法、设置先决条件和后置条件、实现多方法、增加函数特性、、同步;此外更远大的用法包括:尾调用消除、记忆化。 为了增强代码的可读性,可以在函数后书写“文档字符串”(简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数codice_242,打印出函数的使用帮助。自从Python 3.0,函数可以对参数与返回值增加类型标注。此特性可方便对源代码进行更深入的分析。自从Python 3.5,开始支持类型提示。 对象及其方法. Python支持大多数面向对象编程技术。在Python中所有东西都是对象,包括类、函数、数和模块。它允许多态性,不只是在之内,而且通过采用鸭子类型的方式。任何对象可以用于任何类型,只要它有适当的方法和特性(attribute)就能工作。Python天然支持类的继承包括多重继承,为此采用C3线性化或方法解析次序(MRO)算法,还支持混入。Python支持元类,自从Python 3.6,提供了定制类创建的简单机制。 Python使用名字修饰,有限的支持私有变量。对象的(可写)特性可以被提取为一个字典。在Python中,不强制使用访问子与变异子方法,来访问数据成员的面向对象编程信条。就像Python提供函数式编程构造,但不尝试要求一样,它提供对象系统,但不要求面向对象编程行为。 对象的方法,是附属于这个对象的类的函数。对于正常的方法和函数,语法instance.method(arguments),是Class.method(instance, arguments)的语法糖。Python的方法有显式的codice_93形式参数,用来访问实例数据;这借鉴自Modula-3,对立于隐式的codice_244或codice_93关键字,它们用在其他一些面向对象编程语言,比如C++、Java、Objective-C或Ruby之中。在Python中,codice_244可以被看作是一个习惯用法,它可以被换为任何其它合法的参数名。 Python提供了codice_247内建函数,在一个类的方法中调用此函数返回一个代理(proxy)对象,它将其方法调用委托给这个类的父类或兄弟类,当一个子类的方法覆盖了超类方法的时候,可通过调用codice_248,来调用与子类的codice_249方法同名超类方法。 Python支持一些以codice_250开始和结束的特殊方法名,它们用于实现运算符重载,以及实现多种特殊功能。在Python中,可以通过定义特殊方法来重载运算符,比如在一个类上定义codice_251,将允许在这个类的实例上使用codice_135算符。 在Python中,定义了一个或多个特殊方法codice_253、codice_254、codice_255的类,可以用作描述器(descriptor)。建立一个描述器的实例,作为另一个类的一个类成员,使得这个实例成为此另一个类的属性(property)。使用与特性(attribute)访问相同的语法,访问一个实例对象中的这个成员属性。 Python允许通过使用codice_256和codice_257修饰符,来分别建立类方法和静态方法。给类方法的第一个实际参数,是对类对象的引用,而非对实例的codice_244引用。静态方法没有特定的第一个实际参数,实例或类对象,都不固定的传递给静态方法。 Python的codice_259内建函数,将一个类中特殊定义的访问一个特性的那些方法,包装成的这个类的一个属性。 类型. Python使用鸭子类型,并拥有有类型的对象,和无类型的变量名字。在编译期不检查类型约束,而宁愿在一个对象上的操作出现可能的失败,表现出这个给定对象不具有适合的类型。尽管是动态类型系统,Python却是强类型的,禁止没有明确定义的操作(比如加一个数到一个字符串),而不是默默的去尝试转换使其有意义。Python支持广泛的类型和类的内省。类型是codice_13的实例,可以被读取和比较。 Python有着范围广泛的基本数据类型。同时具备常规的整数和浮点算术,它透明的支持任意精度算术、复数和。Python支持种类繁多的字符串操作。在Python中,字符串是不可变的,所以在其他编程语言中可能就地改变字符串的字符串操作,比如字符替换,在Python中返回新的字符串。 Python有一个非常有用特征,就是搜集(或称容器)类型的概念。一般的说,搜集是以一种易于引用或索引的方式,包含其他对象的对象。搜集有二种基本形式:序列和映射。Python对建立容器类型的对象有着语法上的支持。Python还提供了广泛的搜集操纵能力,比如内建的包含元素检查和通用迭代协议。 有次序的序列类型是列表(动态)、元组和字符串。所有序列类型都是位置索引的(从codice_43到codice_262),并且除了字符串,都可以包含任意类型的对象,在同一个序列中包括多种类型的对象。字符串和元组是不可变的,使得它们成为字典的键的完美候选者。在另一方面,列表是可变的,元素可以被插入、删除、修改、添加或就地排序。 在另一方面,映射是以“字典”形式实现的无次序的类型,它将一组不可变的键,映射到相应的元素上(非常像数学函数)。在字典中的键,必须是不可变的Python类型,比如整数或字符串,因为在底层它们是通过散列函数实现的。字典还是语言内部的中心,因为它们居于所有Python对象和类的核心:在变量名字(字符串)和这个名字所引用的值之间的映射,就存储为字典,而这些字典可以通过对象的codice_263特性直接访问。 搜集类型,在版本2.4中被增加入语言核心。集合是无索引、无次序的搜集,它包含唯一性的不可变对象作为元素,并且实现了集合论运算,比如并集codice_144、交集codice_143、相对补集codice_136、对称差codice_146,和子集测试codice_153、真子集测试codice_150、超集测试codice_154、真超集测试codice_149。有二种类型的集合:可变的codice_272和不可变的codice_273。 Python允许编程者使用类,定义自己的类型,类是在面向对象编程中最经常使用的。类的新实例,是通过调用这个类的构造器而创建的,而类都是元类codice_13的实例,codice_13是codice_13元类自身的实例,这允许了元编程和反射。{{efn|1= 两个类及元类等的实例关系(蓝色连接)与继承关系(绿色连接)示意图: r = object c = type class M(c): pass class A(metaclass=M): pass class B(A): pass b = B() »> type(b) »> print(type(B), B.__bases__) (,) »> print(type(A), A.__bases__) (,) »> print(type(M), M.__bases__) (,) »> print(type(c), c.__bases__) (,) »> print(type(r), r.__bases__) () 在版本3.0之前,Python有两种类:旧式的和新式的。二种样式的语法是一样的,不同在于是否直接或间接的继承自类codice_102,所有新式类都从codice_102继承,并且是codice_13的实例。在Python 2系列2.2以上,二种类都可以使用。在Python 3.0中淘汰了旧式类。 长期规划是支持{{en-link|渐进类型|gradual typing}},并且自从Python 3.5,语言的语法允许指定静态类型,但在缺省实现CPython中不检查它们。有叫做“mypy”的可选的静态类型检查器,支持编译期类型检查。 除了各种数据类型,Python解释器还内建了很多其他类型,包括可调用类型:用户定义函数、实例方法、生成器函数、协程函数、异步生成器函数、内建函数、内建方法、类、类方法;模块,定制类,类实例,I/O对象(也叫做文件对象),和暴露给用户的一些内部类型:代码对象、框架对象、溯回对象、切片对象、静态方法对象、类方法对象。 数学. Python的算术运算,使用平常的符号codice_135、codice_136、codice_137、codice_140和模除codice_138(这里的余数可以是负数,比如codice_285)。它还有下取整除法算符codice_139,指数算符codice_141,比如codice_288及codice_289,和矩阵乘法算符codice_142。这些算符就像在传统数学中一样运算,具有同样的优先级规则,中缀算符codice_135、codice_136,还可以分别表示取原数和取相反数的一元算符。 在整数之间的除法codice_140,产生浮点数结果。除法codice_140的表现,随着版本不同而有着显著变化。 Python提供了codice_295内建函数,用于把一个浮点数修约成最近的整数。 Python允许由比较运算链接起来的布尔表达式,表现得如在数学中常用的一样。比如表达式codice_160,测试codice_297。C语言将它解析为codice_298:即首先求值codice_299,其结果为codice_43或codice_301,接着把这个结果比较于codice_178。 Python对所有整数运算,使用任意精度算术。在codice_303模块中的codice_304类,提供{{en-link|十进制浮点数|Decimal floating point}},具有用户可按需要而更改的缺省28个十进制有效数位精度,并有多种修约方式。在codice_305模块中的codice_306类,提供任意精度的有理数。 由于Python有着广泛的数学库,除了求绝对值函数codice_307列入内建函数之外,大多数数学函数,处于codice_308和codice_309模块内。前者用于实数运算,而后者用于复数运算。{{efn|数学运算示例。比如: »> def mean(seq): ... return sum(seq) / len(seq) »> mean([3, 4]) 3.5 »> import math »> print(math.sin(math.pi/2)) 1.0 }}特别是第三方库NumPy,进一步扩展了固有能力,Python经常被用作科学脚本语言,来处理如数值数据处理和操纵等问题。 标准库. Python拥有一个强大的标准库。Python标准库包括了如下功能: 程序代码实例. 一个在标准输出设备上输出Hello World的简单程式,这种程式通常作为开始学习程式语言时的第一个程式,可将如下代码录入纯文本文件并随意命名比如codice_310,然后执行这个程序codice_311: print("Hello, world!") Python也可以单步直译执行。执行Python直译器进入互动式命令列的环境,你可以在提示符号codice_312旁输入codice_313,按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及以上版本中,codice_314是个函数,需要在要打印的字符串前后加上圆括号;在Python 2.6以下版本中,codice_314是一个关键字和命令而不加圆括号。 实现. Python是一门跨平台的脚本语言,Python规定了一个Python语法规则,根据该规则可编写Python直译器。Python属于动态语言,其官方实现将Python程序编译成中间形式的字节码,并接着在它的虚拟机上执行,相较于C/C++和java的等编译语言而言运行速度较慢。 仍在维护中的旧版本实现有:Stackless Python,它是实现{{en-link|微线程|microthread}}的CPython 3.8分叉;IronPython,它是建造在动态语言运行时(DLR)之上的Python 2.7和Python 3.4实现;Jython,它是用Java实现的Python 2.7。 开发环境. 通用文本编辑器. 很多并非集成开发环境软件的文本编辑器,也对Python有不同程度的支持,并且加上专门为Python设计的编辑器插件也会有很高的可用性。 专用开发环境. 适用于Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他选择。其中有些软件设计有语法着色、语法检查、运行调试、自动补全、智能感知等便利功能。由于Python的跨平台出身,这些软件往往也具备各种操作系统的版本或一定的移植性。 第三方扩展包. Python社群提供了大量的功能覆盖众多领域的第三方模组,其使用方式与标准库类似。第三方模块可以使用Python/Cython或者C语言编写。软件工具SWIG和{{le|SIP (软件)|SIP (software)|SIP}},通过定义接口文件或规定文件的方式,可以将C/C++编写的程序库包装为Python模块。Python解释器本身也可以被集成到其它需要脚本语言的程式内。 Python包索引是公开的软件包在线仓库。pip是官网推荐的以安全方式安装Python应用及其依赖软件包的最流行工具。要安装在整个操作系统范围内共享的Python包,现在需要通过操作系统的软件包管理系统。要将特定于应用的依赖包隔离于共享的Python安装,可以使用venv或virtualenv创建虚拟环境;pipenv能自动为用户项目建立和管理虚拟环境,并在安装/卸装软件包的时候,向此项目的Pipfile文件增加/移除这个软件包。 网络服务. Python定义了WSGI标准应用接口,来协调HTTP伺服器与基于Python的Web程式之间的沟通。比如,通过{{link-en|mod_wsgi|mod_wsgi}}模组,Apache可以运行用Python编写的Web程式。Zope是著名的用Python编写的开源的Web应用服务器。Tornado是用Python语言写成的非阻塞式web服务器,也是轻量级的Web框架。 Python对于各种网路协定的支援很完善,因此适用于编写伺服器软体、网路爬虫等Web开发。用Python编写的一些Web框架,有助于轻松地开发和管理复杂的Web程式。著名的第三方Web框架和函数库: 图形用户界面. Python本身包含了Tkinter库,它是Python的业界标准GUI并被集成进入了IDLE。Tkinter基于了Tcl命令工具,能够支持简单的GUI开发。但是为了让所开发的软件运行速度更快,并与用户的桌面环境更契合,人们一般会选择采用第三方GUI库或框架。著名的第三方GUI库: 数据科学. 重要的数据科学用第三方软件库有: 数据可视化. 主要的数据可视化软件库及“仪表板”框架有: 机器学习. 基础性的机器学习软件库及框架有: 应用. 在很多作业系统里,Python是标准的系统元件,它被列入Linux标准规范之中。大多数Linux发行版和macOS都集成了Python,可以在终端模拟器或{{en-link|虚拟控制台|Virtual console}}下直接执行Python。pipx可以将Python应用安装于隔离的环境中并在其中运行它。 虽然Python可被粗略地分类为脚本语言,Python的支持者较喜欢称它为一种高阶动态语言,常像“胶水”一样被用来连接软件组件,已经显著的区别于Unix shell、Windows PowerShell这样的语言。基于Python的xonsh,是跨平台的、青睐Unix的shell语言和命令行界面。 应用程序. 一些Linux发行版,使用Python语言编写安装器,比如Ubuntu的Ubiquity和Fedora的Anaconda;或使用它编写软件包管理系统,比如Gentoo的Portage。如下著名应用使用Python编写或将它作为嵌入式脚本: 人工智能. 经由Python开发了众多的人工智能模型和作为其支撑的软件库: 社群流行. 自从2003年,Python始终排行于{{en-link|TIOBE编程社区索引|TIOBE Programming Community Index}}前十最流行编程语言,在2021年10月它首次达到了第一名最流行语言(居于C和Java之前),并被选为2007年、2010年、2018年、2020年和2021年的年度编程语言。它有如下著名的社群: 影响的语言. Python的设计和哲学已经影响了很多其他编程语言: Ruby的创建者松本行弘曾说过:“我想要一种脚本语言,比Perl更加强力而且比Python更加面向对象,因此我决定设计自己的语言”。Julia设计原则中有一条是:“像Python一样可用于通用编程”。
Python
本站由爱斯园团队开发维护,感谢
那些提出宝贵意见和打赏的网友,没有你们的支持,
网站不可能发展到今天,
继往开来,善终如始,我们将继续砥砺前行。
Copyright ©2014 iissy.com, All Rights Reserved.