小百科  > 所属分类  >  编程语言   
[0] 评论[0] 编辑

Python

目录

简介编辑本段

    Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括函数式、指令式、结构化、面向对象和反射式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。
    Python由吉多·范罗苏姆创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式的LISP方言。Python的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进划分代码块。相比于C或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。Python解释器本身几乎可以在所有的操作系统中运行。Python的官方解释器CPython是用C语言编写的,它是一个由社区驱动的自由软件,目前由Python软件基金会管理。
Python语言Python语言

基本信息编辑本段

软件名称    Python
操作系统    Windows、LinuxUNIXmacos
编程范型    多范型:函数式、指令式、结构化、面向对象、反射式
发行时间    1991年
设计者    吉多·范罗苏姆
实现者    Python软件基金会
最近更新时间    2021年4月4日
软件语言    Python
开发商    Python Software Foundation
软件授权    Python Software Foundation
稳定版本    3.9.6
类型系统    鸭子类型、动态、强类型、渐进(自从3.5)
许可证    Python软件基金会许可证
文件扩展名   .py、.pyi、.pyc、.pyd、.pyo(3.5之前)、.pyw、.pyz(自从3.5)
软件大小    26 至 29 MB
网站    www.python.org
是否区分大小写    是

历史编辑本段

    Python的创始人为吉多·范罗苏姆,当时他在阿姆斯特丹的荷兰数学和计算机科学研究学会工作。1989年的圣诞节期间,吉多·范罗苏姆为了在打发时间,决心开发一个新的脚本解释编程,作为ABC语言的一种继承,替代使用Unix shell和C语言进行系统管理,担负同Amoeba操作系统的交互和异常处理。之所以选中Python作为编程的名字,是因为他是BBC电视剧——《蒙提·派森的飞行马戏团》(Monty Python's Flying Circus)的爱好者。范罗苏姆作为Python的主要开发者独自担负这个项目的职责,直到2018年7月12日,他宣布从作为终身仁慈独裁者(BDFL)的职责上“永久休假”,Python社区向他授予这个头衔反映了他长期担任整个Python语言的发展方向的决策者。他在2019年1月至11月于参与了一个五人掌控委员会继续领导项目发展。
    在1991年2月,范罗苏姆发布了最初代码(标记为版本0.9.0)于alt.sources,这时就已经存在了带继承的类、异常处理、函数和核心数据类型list、dict、str等。在这个最初发行中就有了从Modula-3引进的模块系统,它的异常模型也类似于Modula-3,但增加了else子句。在1994年1月Python达到了版本1.0。这个发行版主要新特征是包括了Amrit Prem提供的函数式编程工具lambda、map、filter和reduce。Python 1.4增加了受Modula-3启发的关键字参数和对复数的内建支持,还包含采取名字修饰的一种基本形式的数据隐藏。
    Python 2.0于2000年10月16日发布,介入了列表推导式,这是从函数式编程语言SETL和Haskell中引入的。它还向垃圾收集系统增加了环检测算法,并且支持Unicode[38]。Python 2.1支持了嵌套作用域,就像其他静态作用域语言一样[39]。Python 2.2的重大革新是将Python的类型(用C写成)和类(用Python写成)统一入一个层级,使得Python的对象模型成为纯粹和一致的面向对象的模型[40];还增加了迭代器,受CLU和Icon启发的生成器,和描述器协议。Python 2.4加入了集合数据类型,和函数修饰器[44]。Python 2.5加入了with语句。
    Python 3.0于2008年12月3日发布,它对语言做了较大修订而不能完全后向兼容。Python 3发行包括了2to3实用工具,它(至少部分的)自动将Python 2代码转换成Python 3代码。Python 3的很多新特性后来也被移植到旧的Python 2.6/2.7版本中。
    Python 2.7的产品寿命结束日期最初设定为2015年,出于对大量的现存代码不能前向移植到Python 3的关切而延期至2020年。随着Python 2的产品寿命结束,只有Python 3.9和后续版本正在被完全支持,但仍提供对3.6、3.7和3.8版本的安全性修正。
    在2020年12月,活跃的Python核心开发者选举Barry Warsaw、Brett Cannon、Carol Willing、Pablo Galindo Salgado和Thomas Wouters为2021年度“掌控委员会”的五位成员来领导这个项目。

特征与设计哲学编辑本段

    Python是多范型编程语言。它完全支持结构化编程和面向对象编程,还有很多特征支持函数式编程和元编程包括元类和元对象(魔术方法)。通过扩展还可以支持很多范型,包括面向切面编程、契约式设计和逻辑编程。
    Python使用动态类型,在内存管理上采用引用计数和环检测相结合的垃圾收集器。它的特征还有动态名字解析(后期绑定),即在程序执行期间绑定方法和变量的名字。
    Python对遵循LISP传统的函数式编程提供了有限的支持,它提供了 map、filter和reduce函数;列表推导式、字典、集合和生成器表达式。标准库中的模块functools和itertools,实现了从Haskell和Standard ML借鉴来的函数式工具。
    Python的设计哲学是“优雅”、“明确”、“简单”。它的重要准则被称为“Python之禅”。在Python解释器内运行import this可以获得完整的列表,下面是其中首要:
  • 优美优于丑陋。明了优于隐晦。
  • 简单优于复杂。复杂优于凌乱。
  • 扁平优于嵌套。稀疏优于稠密。
  • 可读性很重要。
    Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,显著不同于拥有“不止一种方法去做一件事”风格的语言例如perl。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。
    范罗苏姆认为ABC语言非常优美和强大,并没有成功的原因是非开放造成的,故而将Python本身设计为可扩展的。Python并不把所有的特性和功能都集成到语言核心,而是提供了丰富的API和工具,以便程序员能够轻松地使用C、Cython来编写扩展模块,因此很多人使用Python将其他语言编写的编程进行集成和封装。Python编译器本身也可以被集成到其它需要脚本语言的编程内。
    Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python的官方实现CPython中。在某些对运行速度要求很高的情况,Python设计师可以使用JIT技术的PyPy,或者是将Python脚本翻译成C的Cython,还可以将时间关键的函数迁移至用C语言编写的扩展模块中。

语法编辑本段

    Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。Python语句之后的分号是可选的,作为动态语言不需要书写“声明”语句,不同于其他的静态语言如C、Pascal。

缩进

    Python语言利用缩进表示语句块的开始和结束(越位规则),而非使用大括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的结束。根据PEP 8的规定,使用4个空格来表示每级缩进。
    使用Tab字符和其它数目的空格虽然都可以被解释器识别,但不符合编码规范,偏向使用Tab字符的程序员可以设置文本编辑器将Tab键转换为4个空格。缩进成为了语法的一部分,并且Python开发者有意让违反了“缩进规则”的程序不能通过解释。

关键字

    Python有如下35个关键字或“保留字”;它们不能用作标识符:

语句和控制流

    Python的语句包括:
  • 赋值语句,记号为等号=。Python支持并行赋值,可以同时给多个变量赋值,还可以交换两个变量的值。
  • del语句,递归的进行删除。
  • pass语句,充当NOP,表示此行为空,不运行任何操作。
  • assert语句,用于编程调适阶段时测试运行条件是否满足。
  • if语句,当条件成立时运行语句块。经常与elif、else配合使用。
  • for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
  • while语句,当条件为真时,循环运行语句块。
  • break语句,从循环中退出。
  • continue语句,越过这次迭代并继续进行下个项目。
  • try语句,与except、else、finally配合使用,处理在编程运行中出现的异常情况。
  • raise语句,抛出一个异常。
  • class语句,用于定义类,它执行一块代码并将它的局部名字空间附属至一个类。
  • def语句,用于定义函数和方法。
  • return语句,用来从函数返回值。
  • yield语句,使用它从一个生成器中返回一个值。在版本2.5之前,生成器是惰性迭代器,信息是单向的从生成器传递出来的。自从版本2.5,yield也是一个有返回值的运算符,能够将信息传递回到生成器函数中。自从版本3.3,信息可以传递通过多个堆栈层级。
  • with语句,把一块代码包裹在一个上下文管理器之内。例如,在一块代码执行之前获取一个锁并且在此后释放这个锁,或打开一个文件并且在此后关闭它。它允许了资源获取即初始化(RAII)式行为并可替代常见的try/finally惯用法。
  • import语句,导入一个模块或包。有三种用法:import <模块名字> [as <别名>],from <模块名字> import *,from <模块名字> import <定义1> [as <别名1>], <定义2> [as <别名2>], ...。
    在Python中赋值语句所进行的操作是将一个名字绑定为到一个分立的、动态分配的对象的一个引用。因为名字的存储位置不“包含”这个指示的值,称它为“变量”是不准确的。这个名字可以随后在任何时候重新绑定到极大不同的各种类型的对象上,包括字符串、过程、具有数据和方法的复杂对象等等。因为名字是通用的引用持有者,给它关联一个固定的数据类型是不合理的。但是在给定时间一个名字总是被绑定到有一个类型的某个对象上,因此这是动态类型。接连的把一个共同的值赋值给多个名字,比如x = 2; y = 2; z = 2,导致给3个名字和1个数对象分配存储,这3个名字都绑定到这1个数对象上。Python赋值语句的这种基础机制,不同于传统指令式编程语言比如C中的赋值,在这里右手侧的值被复制到给这个变量分配的存储位置之中,等号左手侧的变量名字是其符号地址,对为它声明的类型而言分配给它的内存是足够大的。
    Python支持并广泛使用异常处理作为检测错误状况和程序中其他“异常”事件的方式。Python风格提倡在可能出现错误状况的任何时候都使用异常。在Python中习惯上不在使用之前对访问一个文件或资源进行测试,而是先行尝试使用它,再捕获访问被拒绝引发的异常。经常为此援引的格言是葛丽丝·霍普贡献的EAFP:“请求原谅比许可更容易”。Python使用with语句处理资源,在进入一个作用域的时候调用一个函数而在离开它的时候调用另一个函数。这能防止忘记移除资源并且还可处理更复杂的状况比如异常。
    Python不支持尾调用优化或第一类续体,并且根据吉多·范罗苏姆,永远都不会加以支持。但是,在版本2.5中通过扩展Python的生成器,提供对协程式功能的更好的支持。[f]版本3.4介入了综合性的异步I/O框架标准化,在其中扩展了利用子生成器委托的协程,这个扩展自从Python 3.8被弃用。Python 3.5通过async/await语法介入了对协程的显式支持。从版本3.7开始async/await成为保留关键字。
    模块是定义可以被导入并重用于其他Python程序中的函数和类的Python正规.py文件。import语句找到一个模块,装载它,如果有需要的话初始化它,并且定义用来引用这个模块中代码的一个名字或一些名字。from...import语句,找到、装载、必需时初始化一个模块,接着增加模块引用到局部名字空间,允许访问其中的函数和类而不用到模块引用。from ... import支持*选项来导入所有引用而非指名的特定函数或类。当模块被导入的时候,__name__变量被设置成这个模块的名字。在Python解释器直接运行一个模块的时候,__name__变量被设置为"__main__"。这允许被设计用于导入的模块增加只在模块被直接运行时候执行的代码。dir()函数返回在当前局部作用域中或参数指定的对象中的名字的列表。

表达式

    Python中很多表达式与C和java类似,而另一些则与之不同。
  •     在Python中,算术运算的加法+、减法-、乘法*和取模%是与C和java相同的,但是除法的行为不同。在Python中有两种除法,它们是下取整除法(或整数除法)//和浮点除法/[86] 。Python增加了指数算符**。Python有如下必须用于整数的位运算:&与(AND),|或(OR),~非(NOT),^异或(XOR),>>右移, <<左移。自从Python 3.5,介入了新的@中缀算符。它意图用于库比如NumPy中的矩阵乘法。
  •     在Python中,有如下比较运算:大于>,小于<,等于==,不等于!=,小于等于<=,大于等于 >=。==按值比较,对比于Java,它按值比较数而按引用比较对象(在Java中比较对象的值可以采用equals()方法)。Python的is、is not算符可以用来比较对象的同一性(按引用比较),也就是比较两个变量是否引用了同一个对象。而in、not in用于判断一个对象是否属于另外一个对象。在Python中,比较是可以链接起来的,比如a <= b <= c。
  •     Python使用and、or、not表示逻辑运算与、或、非,不采用Java和C中所用的符号&&、||、!。
  •     自从Python 3.8,介入了“指定表达式”语法:=。它也叫做“命名表达式”或“海象”,它将一个表达式指定给一个标识符,同时还返回这个表达式的值,常用作更大的表达式的一部分。
  •     自从Python 3.9,介入了字典归并算符|和更新算符。
  •     Python支持列表推导式。Python 2.4将列表推导式扩展至更一般性的生成器表达式。Python 3.0和2.7又补全了字典推导式和集合推导式。
  •     Python的匿名函数实现为lambda表达式。匿名函数体只能是一个表达式。
  •     Python的条件表达式表示为x if c else y。意思是当c为真时,表达式的值为x,否则表达式的值为y。 在运算数的次序上不同于很多其他语言中常见的c ? x : y。
  •     Python区分列表(list)和元组(tuple)两种类型。列表的写法是[1,2,3],而元组的写法是(1,2,3)。在没有歧义的情况下,元组的圆括号是可选的,一个元素的元组向这个元素尾随一个逗号例如(1,)。列表是可变的,并且不能用作字典的键(Python中字典的键必须是不可变的)。元组是不可变的,因而可以用作字典的键,假定这个元组的所有元素都是不可变的话。可以使用+算符来串接二个元组,这不会直接修改它们的内容,而是产生包含给定元组二者的元素的一个新元组。因此,给定变量t初始时等于(1, 2, 3),执行t = t + (4, 5)时,首先求值t + (4, 5),它产生(1, 2, 3, 4, 5),接着赋值回到t,这在效果上“修改了”t的内容,尽管这还是遵守了元组对象的不可变本性。
  •     Python有“序列解包”特征,多个表达式,其中每个都可求值成能被赋值的东西(变量、可写的属性等),以与形成元组文字(literal)相同的方式,关联起来作为一个整体,放置在赋值语句等号的左手侧。这个语句预期在等号的右手侧有一个“可迭代”对象,在迭代它的时候产生同左手侧给出的可写表达式相同数目的值,这个语句对它进行迭代并把每个产生的值赋值给左手侧对应的表达式。这个特征允许从一个单一函数返回多个值。自从Python 3.5,增加了在表达式列表中的“可迭代解包”*和在字典显示中的“字典解包”**。
  •     Python拥有“字符串格式”算符%。这个功能类同于C中的printf格式化字符串,比如"spam=%s eggs=%d" % ("blah", 2)求值成"spam=blah eggs=2"。在Python 3和2.6+中,这通过str类的format()方法来提供,比如"spam={0} eggs={1}".format("blah", 2)。Python 3.6增加了“f-字符串”:blah = "blah"; eggs = 2; f'spam={blah} eggs={eggs}'。
  •     Python拥有各种字符串文字:
  •         由单引号'或双引号"界定的字符串。不同于Unix shell、Perl和受Perl影响的语言,单引号和双引号功能相同。这二种字符串都使用反斜杠\作为转义字符。在Python 3.6中字符串插值可作为“格式化字符串”而获得到。
  •         三引号字符串,开始和结束于三个单引号或双引号的序列。它们可以跨越多行,其功能就像shell、Perl和Ruby中的here文档。[n]
  •         原始字符串变体,用给字符串文字前导一个r来指示。转义序列不被解释,因此在文字反斜杠常见的地方很有用,比如正则表达式和Windows风格的路径。[o]可比较于C#中的“@-引用”。
  •     Python允许连续出现和只用空白分隔(包括换行)的字符串文字(可能使用了不同的引用约定),它们被聚合成一个单一的更长的字符串。
  •     Python拥有在列表上的数组索引和数组分片表达式,表示为a[key]、a[start:stop]或a[start:stop:step]。索引是基于零的,负数是相对于结尾的。分片从“开始”(start)索引直到但不包括“停止”(stop)索引。分片的第三个参数叫做“步长”(step)或“间隔”(stride),允许元素被跳过和用负数指示反向。分片索引可以省略,例如a[:],这返回整个列表的一个复本。分片的每个元素都是浅层复制的。
    在Python中,在表达式和语句之间的区别是严格强制性的,对比于语言如Common Lisp、Scheme或Ruby。这导致重复了某些功能。比如:列表推导式对当for循环。条件表达式对当if块。eval()对当exec()内建函数(在Python 2中,exec是语句);前者用于表达式,后者用于语句。
    语句不能成为表达式的一部分,所以列表和其他推导式或lambda表达式,都是表达式,不能包含语句。这个限制的一个特定情况是赋值语句比如a = 1,不能形成条件语句的条件表达式的一部分。这能够避免一个经典的C错误,即在条件中把等于算符==误写为赋值算符=,if (c = 1) { ... }在语法上是有效(但可能非预期)的C代码,而if c = 1: ...在Python中导致一个语法错误。

函数

    Python的函数支持递归和闭包[r]及其他头等函数特征,但不支持函数重载。Python的函数作为第一类对象,具有和普通对象平等的地位。Python的函数实际参数与形式参数之间的结合是传递“对象的引用”,就是把形式参数名字绑定到实际参数名字所引用的对象上。如果形式参数绑定到一个可变的对象,则通过形式参数对此对象内容的修改,在函数外也是可见的。如果形式参数绑定到一个不可变的对象,则通过形式参数是不能修改此对象内容,但可以把形式参数重新绑定到其它对象上,这并不影响函数外的对象的值。
    Python的变量有函数作用域、模块作用域和全局作用域。简单访问(不赋值)一个变量的时候,名字解析服从窄到宽的LEGB(局部、包围、全局、内建)顺位规则。在函数中赋值一个变量将导致它成为这个函数的局部变量,就是说它的作用域在整个函数中,而不是在这个赋值之后至这个函数结束,因此在这个赋值之前引用它,不再于这个函数之外查找同名变量而是引发一个错误。缺省的名字解析规则可以用global或nonlocal关键字来覆盖。global声明的变量是全局变量。global可以用于嵌套的函数中。嵌套函数中还可以使用nonlocal声明,用于赋值到给非局部变量。
    Python可以指定形式参数的缺省值,在函数定义时于形式参数序列中以param=value样式进行一次性初始化。形式参数在初始化之后保持既有绑定,函数的后续调用可继续对它进行访问或变更。[v]在函数调用时为有缺省值的形式参数提供实际参数是可选的。Python支持位置实际参数和关键字实际参数。函数调用时,实际参数可以如同C语言那样按照位置与形式参数匹配;也可以采用命名参数(或称为关键字实际参数),即kwarg=value样式的实际参数。使用不对应实际参数的特殊形式参数/和*,可以将参数序列分为唯位置参数、可位置可关键字参数和唯关键字参数三部分。有缺省值的形式参数之后不能跟随无缺省值的可位置形式参数。[w]在一个函数调用的实际参数序列中,关键字实际参数必须出现在位置实际参数之后。
    在位置和关键字形式参数序列末尾可以分别有*args或**kwargs这样的形式参数,它们对应于在函数调用时提供的,超出形式参数序列规定而无所对应的多个实际参数;在形式参数名字前加一个*号,该形式参数args是tuple类型,对应可变量目的位置实际参数;在形式参数名字前加**号,该形式参数kwargs是dict类型,对应可变量目的关键字实际参数。[x]在位置实际参数已经在一个序列类型如列表或元组的对象中的情况下,在引用它的变量前加一个*号传递给函数,则其中所有元素解包为多个位置实际参数,关键字实际参数在字典中则加**号来传递给函数。
    修饰器(decorator)是用来修改一个函数、方法或类定义的任何可调用Python对象。将正被定义的最初对象传递给修饰器,它返回一个修改后的对象,接着把它绑定到在定义中那个名字。Python修饰器部分受到Java注解的影响,而有类似的语法;修饰器语法是纯粹的语法糖,使用@作为关键字形成修饰符。修饰器是一种形式的元编程,它们增强它们所修饰的函数或方法的行动。[y] 多个修饰器可以链接起来,通过在毗连的行上放置多个修饰符,或者使用中间变量。函数修饰器的正规用法包括:用来创建类方法或静态方法,实现多方法,增加函数特性,跟踪,设置先决条件和后置条件,同步;此外更远大的用法包括:尾调用消除,记忆化甚至改进修饰器的写作。
    为了增强代码的可读性,可以在函数后书写“文档字符串”(简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出函数的使用帮助。自从Python 3.5,开始支持类型提示,可以标注函数的参数与返回值。此特性可方便IDE对源代码进行更深入的分析。

对象及其方法

    Python支持大多数面向对象编程技术。在Python中所有东西都是对象,包括类、函数、数和模块。它允许多态性,不只是在类层级之内而且通过采用鸭子类型的方式。任何对象可以用于任何类型,只要它有适当的方法和特性(attribute)就能工作。Python天然支持类的继承包括多重继承,为此采用C3线性化或方法解析次序(MRO)算法,还支持mixin。Python支持元类,它是增进类的功能的高级工具。
    Python使用名字修饰有限的支持私有变量。对象的特性可以被提取为一个字典。在Python中不强制使用访问子与变异子方法来访问数据成员的面向对象编程信条。就像Python提供函数式编程构造但不尝试要求参照透明性(无副作用)一样,它提供对象系统但不要求面向对象编程行为。
    对象的方法是附属于这个对象的类的函数。对于正常的方法和函数,语法instance.method(arguments),是Class.method(instance, arguments)的语法糖。Python的方法有显式的self形式参数用来访问实例数据,对比于在其他一些面向对象编程语言(比如C++、Java、Objective-C或Ruby)中隐式的self或this关键字[104]。在Python中,self可以被看作是一个习惯用法,它可以被换为任何其它合法的参数名。
    Python支持一些以__开始和结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。在Python中,可以通过定义特殊方法来重载运算符,比如在一个类上定义__add__()将允许在这个类的实例上使用+算符。在Python中,当一个子类的方法覆盖了超类方法的时候,通过调用super().method来调用与子类的self.method方法同名超类方法。
    Python允许通过使用@classmethod和@staticmethod修饰符来分别创建类方法和静态方法。给类方法的第一个实际参数是类对象而非对实例的self引用。静态方法没有特定的第一个实际参数,实例或类对象都不固定的传递给静态方法。
    在Python中定义了一个或多个特殊方法__get__()、__set__()、__delete__()的类可以用作描述器(descriptor)。如此创建一个描述器的实例作为另一个类的一个类成员,使得这个实例成为此另一个类的属性(property)。使用与特性(attribute)访问相同的语法,访问一个实例对象中的这个成员属性。[af] Python的property内建函数,将一个类中特殊定义的访问一个特性的那些方法包装成的这个类的一个属性。

类型

    Python 3中的标准类型层次结构
    Python使用鸭子类型并拥有有类型的对象和无类型的变量名字。在编译期不检查类型约束,而宁愿在一个对象上的操作出现可能的失败,表现出这个给定对象不具有适合的类型。尽管是动态类型系统,Python却是强类型的,禁止没有明确定义的操作(比如加一个数到一个字符串),而不是默默的去尝试转换使其有意义。Python支持广泛的类型和类的内省。类型是type的实例,可以被读取和比较。
    Python有着范围广泛的基本数据类型。同时具备常规的整数和浮点算术,它透明的支持任意精度算术、复数和十进制浮点数。Python支持种类繁多的字符串操作。在Python中字符串是不可变的,所以在其他编程语言中可能就地改变字符串的字符串操作比如字符替换,在Python中返回新的字符串。
    Python的一个非常有用方面就是搜集(或称容器)类型的概念。一般的说,搜集是以一种易于引用或索引的方式包含其他对象的对象。Python对创建容器类型的对象有着语法上的支持。[ah]搜集有二种基本形式:序列和映射。有次序的序列类型是列表(动态数组)、元组和字符串。所有序列类型都是位置索引的(从0到长度−1),并且除了字符串,都可以包含任意类型的对象,在同一个序列中包括多种类型的对象。字符串和元组是不可变的,使得它们成为字典的键的完美候选者。在另一方面,列表是可变的,元素可以被插入、删除、修改、添加或就地排序。
    在另一方面,映射是以“字典”形式实现的无次序的类型,它将一组不可变的键映射到相应的元素上(非常像数学函数)。在字典中的键必须是不可变的Python类型,比如整数或字符串,因为在底层它们是通过散列函数实现的。字典还是语言内部的中心,因为它们居于所有Python对象和类的核心:在变量名字(字符串)和这个名字所引用的值之间的映射就存储为字典,而这些字典可以通过对象的__dict__特性直接访问。
    集合搜集类型是在版本2.4中增加入语言核心的。集合是不包含重复项的无索引、无次序的搜集,并且实现了集合论运算比如并集、交集、相对补集、对称差和子集测试。有二种类型的集合:可变的set和不可变的frozenset。集合中元素必须是可散列的,比如说,frozenset可以是正规set的元素而反之不行。Python还提供了广泛的搜集操纵能力比如内建的包含元素检查和通用迭代协议。
    Python允许编程者使用类定义自己的类型,类在面向对象编程中是最经常使用的。类的新实例是通过调用这个类的构造器而创建的,而类都是元类type的实例,type是type元类自身的实例,[ai]这允许了元编程和反射。
    在版本3.0之前,Python有两种类:旧式的和新式的。二种样式的语法是一样的,不同在于是否直接或间接的继承自类object,所有新式类都从object继承并且是type的实例。在Python 2系列2.2以上,二种类都可以使用。在Python 3.0中淘汰了旧式类。
    长期规划是支持渐进类型,并且自从Python 3.5,语言的语法允许指定静态类型,但在缺省实现CPython中不检查它们。有实验的叫做“mypy”的可选的静态类型检查器支持编译期类型检查。

数学

    Python的算术运算使用平常的符号+、-、*、/,下取整除法算符//和模除%(这里的余数可以是负数,比如4 % -3 == -2)。它还有指数算符**,比如5**3 == 125及9**0.5 == 3.0,和矩阵乘法算符@。这些算符就像在传统数学中一样运算,具有同样的优先级规则,中缀算符+、-还可以分别表示取原数和取相反数的一元算符。
    在整数之间的除法/产生浮点数结果。除法/的表现随着版本不同而有着显著变化。
    Python提供了round()函数用于把一个浮点数修约成最近的整数。
    Python允许由比较运算链接起来的布尔表达式表现得如在数学中常用的一样。比如,表达式a < b < c测试a小于b并且b小于c。C派生语言不一样的解释这个表达式:在C中,这个表达式将首先求值a < b,结果为0或1,接着把这个结果比较于c。
    Python对所有整数运算使用任意精度算术。在decimal模块中的Decimal类型/类提供十进制浮点数到预定义的任意精度并有多种修约模式。在fractions模块中的Fraction类提供任意精度的有理数。
    由于Python有着广泛的数学库,除了求绝对值函数abs()列入内建函数之外,大多数数学函数处于math和cmath模块内。前者用于实数运算,而后者用于复数运算。特别是,第三方库NumPy进一步扩展了固有能力,Python经常被用作科学脚本语言来处理如数值数据处理和操纵等问题。

标准库编辑本段

    Python拥有一个强大的标准库。Python语言的核心只包含数值、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。
    Python标准库的主要功能有
  • 文本处理,包含文本格式化、正则表达式、文本差异计算与合并、Unicode支持,二进制数据处理等功能。
  • 文件系统功能,包含文件和目录操作、创建临时文件、文件压缩与归档、操作配置文件等功能。
  • 操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、日志(logging)等功能。
  • 网络通信,包含网络套接字,SSL加密通信、异步网络通信等功能。支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多种网络协议,并提供了编写网络服务器的框架。
  • W3C格式支持,包含HTML,SGML,XML的处理。
  • 其它功能,包括国际化支持、数学运算、HASH、Tkinter等。

附件列表


0

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

如果您认为本词条还有待完善,请 编辑

上一篇 得物    下一篇 Java

同义词

暂无同义词