Python

title: 历史.
content: Python的创始人为吉多·范罗苏姆,当时他在阿姆斯特丹的CWI工作。1989年的圣诞节期间,吉多·范罗苏姆为了在打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承,担负同的交互和异常处理。之所以选中Python作为程序的名字,是因为他是BBC电视剧——蒙提·派森的飞行马戏团的爱好者。Python是为了替代使用Unix shell和C语言进行系统管理而从ABC语言发展起来,而它的模块系统主要受到了Modula-3的影响,它还结合了C语言的最少争议特征。就范罗苏姆本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,他认为是非开放造成的。范罗苏姆决心在Python中避免这一错误,并取得了非常好的效果。  目前范罗苏姆仍然是Python的主要开发者,决定整个Python语言的发展方向。Python社群经常称呼他是终身仁慈独裁者(BDFL)。  Python 2.0于2000年10月16日发布,增加了实现完整的垃圾回收,并且支持Unicode。同时,整个开发过程更加透明,社群对开发进度的影响逐渐扩大。  Python 3.0于2008年12月3日发布,此版不完全兼容之前的Python源代码。不过,很多新特性后来也被移植到旧的Python 2.6/2.7版本。
title: 特性与设计哲学.
content: Python是多范式编程语言。完全支持面向对象编程和结构化编程,而它的很多特征支持函数式编程和面向切面编程(包括元编程和(魔术方法))。Python是完全物件导向的语言,函数、模组、数值、字串都是物件;并且完全支持继承、重载、派生、多重继承,有益于增强源代码的复用性。Python支持重载运算符,因此Python也支持泛型设计。Python对遵循Lisp传统的函数式编程提供了有限的支持,它提供了 codice_1、codice_2、codice_3函数;列表推导、字典、集合和生成器表达式。标准库中有两个模组(functools和itertools)实现了从Haskell和Standard ML取来的函数式工具。  Python的设计哲学是“优雅”、“明确”、“简单”。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,也因此它和拥有明显个人风格的其他语言很不一样。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。这些准则被称为「Python之禅」。在Python解释器内运行codice_4可以获得完整的列表,下面是其中首要:  Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。再加上因为Python属于动态类型语言,动态类型语言是在运行期间检查数据的类型,不得不保持描述变量值的实际类型标记,程序在每次操作变量时,需要执行数据依赖分支,而静态类型语言相对于动态类型语言,在声明变量时已经指定了数据类型和表示方法,根据这一原理导致Python相对于C、Visual Basic等静态类型语言来说运行速度较慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师可以使用JIT技术如PyPy,或者使用C/C++语言编写扩展模块。  Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩充模组。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,有很多人把Python作为一种「胶水语言」使用。使用Python将其他语言编写的程序进行集成和封装。
title: 语法.
content: Python的设计目标之一是让程序码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让程序码看起来整洁美观。因为Python是动态语言,它不像其他的静态语言如C、Pascal那样需要书写声明语句。
title: 缩排.
content: Python开发者有意让违反了缩排规则的程序不能通过解释,以此来强迫程序员养成良好的编程习惯,也方便所有人查找和阅读。并且Python语言利用缩排表示语句块的开始和结束(Off-side规则),而非使用花括号或者某种关键字。增加缩排表示语句块的开始,而减少缩排则表示语句块的结束。缩排成为了语法的一部分。例如codice_5语句: if age < 21: print("这句话处于if语句块的外面")  根据PEP 8的规定,必须使用4个空格来表示每级缩排。使用Tab字符和其它数目的空格虽然都可以被解释器识别,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的Python程序和某些有问题的编辑程序。偏向使用Tab字符的程序员可以设置文本编辑器将Tab键转换为4个空格实现缩进而不致导致缩进错误。
title: 表达式.
content: Python的表达式写法与C/C++类似。只是在某些写法有所差别。  »> [x + 3 for x in range(4)] [3, 4, 5, 6] »> sum(x * x for x in range(10)) 285  »> add = lambda x, y : x + y »> add(3, 2) 5  »> x, y=1, 2 #同时给x,y赋值,最终结果:x=1, y=2 特别地,可以使用以下这种形式来交换两个变量的值:  »> x, y = y, x #最终结果:y=1, x=2
title: 函数.
content: Python的函数支持递归、默认参数值、可变参数、闭包,但不支持函数重载。为了增强代码的可读性,可以在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数codice_94打印出函数的使用帮助。比如: »> def randint(a, b):... "Return random integer in range [a, b], including both end points." »> help(randint) Help on function randint in module __main__:  randint(a, b) 函数调用时,实参可以如同C语言那样按照位置与形参匹配;也可以按照命名参数形式调用,即 param_name=value 形式的实参。在一个函数调用的实参表中,关键字引数必须出现在位置参数之后。  可变参数用*args或**dictargs表示,即在形式参数名字前加一个*号,表示这是由多个实参组成的可变参数,该形参视作tuple数据类型;在形式参数名字前加**号,表示这是由多个实参组成的可变参数,该形参视作dict数据类型。实际上,在一个"集合(collection)类型"(包括set、list、tuple甚至bytes、str等)的变量前加一个*号,获得了其中所有元素作为多个对象。  Python的函数作为第一类物件,具有和普通变量平等的地位。函数一旦定义,即可视作为普通对象,其形参会保留上次调用时的值,但在函数新的一次调用时会被实参值覆盖。因此函数的缺省参数值在连续多次调用该函数时,如果不被实参值覆盖,就会一直保留。例如:  def f(a, L=[]):  print(f(1)) print(f(2)) print(f(3))  结果为: 函数的缺省参数值在函数被定义时被一次性计算其初值。  Python的函数实参与形参之间的结合是传递"对象的引用"。这是因为Python的赋值操作是把(变量)名字绑定到对象上。形实结合也是这种方式。如果形参绑定到一个可变的对象,则通过形参对此对象内容的修改,在函数外也是可见的。如果形参绑定到一个不可变的对象,则通过形参是不能修改此对象内容,但可以把形参重新绑定到其它对象上,这并不影响函数外的对象的值。例如:  def foo(a): def bar(b):  a=[] b=100 foo(a) bar(b) print(a) #结果为['haha'] print(b) #结果为100
title: 数据类型与动态类型.
content: Python采用动态类型系统。Python不会在编译期检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。  与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可,比如,对于前面定义的codice_95类型,使用codice_96。类型本身也是特殊类型codice_97的对象(codice_97类型本身也是codice_97对象),这种特殊的设计允许对类型进行反射编程。  Python内置多种数据类型。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):  除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。
title: 面向对象开发方法.
content: 面向对象开发方法是指绑定到对象的函数。调用对象方法的语法是codice_100。它等价于调用codice_101。当定义对象方法时,必须显式地定义第一个参数,一般该参数名都使用codice_102,用于访问对象的内部数据。这里的codice_102相当于C++, Java里面的codice_104变量,但是我们还可以使用任何其它合法的参数名,比如codice_104和codice_106等,codice_102与C++,Java里面的codice_104不完全一样,它可以被看作是一个习惯性的用法,我们传入任何其它的合法名称都行,比如: class Fish(object): class User(object):  f=Fish() Fish.eat(f, "earthworm") f.eat("earthworm")  u = User('username')  u.name Python支持一些以“__”开始并以“__”结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。
title: 数学运算.
content: Python使用与C、Java类似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。除了求绝对值函数codice_109外,大多数数学函数处于codice_110和codice_111模块内。前者用于实数运算,而后者用于复数运算。使用时需要先导入它们,比如: »> import math »> print(math.sin(math.pi/2)) 1.0 codice_112模块用于支持分数运算;codice_113模块用于支持高精度的浮点数运算;第三方库codice_114用于支持数学符号运算。  Python定义求余运行codice_115的值处于开区间codice_116内,如果codice_117是负数,开区间变为codice_118。这是一个很常见的定义方式。不过其实它依赖于整除的定义。为了让方程序:codice_119恒真,整除运行需要向负无穷小方向取值。比如codice_120的结果是codice_121,而codice_122的结果却是codice_123。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。  Python允许像数学的常用写法那样连着写两个比较运行符。比如codice_124与codice_125等价。C++的结果与Python不一样,首先它会先计算codice_126,根据两者的大小获得0或者1两个值之一,然后再与c进行比较。
title: 标准库.
content: Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。  Python标准库的主要功能有:  Python社群提供了大量的第三方模组,使用方式与标准库类似。它们的功能覆盖科学计算、Web开发、数据库接口、图形系统多个领域。第三方模块可以使用Python或者C语言编写。SWIG,SIP常用于将C语言编写的程序库转化为Python模块。Boost C++ Libraries包含了一组函式库,Boost.Python,使得以Python或C++编写的程序能互相调用。Python常被用做其他语言与工具之间的“胶水”语言。
title: 程序代码实例.
content: 一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习程序语言时的第一个程序:  print("Hello, world!")  print "Hello, world!"
title: 单步执行.
content: Python也可以单步直译执行。执行Python直译器进入交互式命令列的环境,你可以在提示符号codice_127旁输入codice_128,按Enter键输出结果:  »> print('Hello, world!') Hello, world!  »> print "Hello, world!" Hello, world! 注意,在3.0及以上版本中,需要在codice_129周围加上圆括号。其原因是在3.0及以上版本中,print命令不再是一个关键字,而是一个函数。
title: 应用.
content: 虽然Python可能被粗略地分类为「脚本语言」,但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高阶动态程序语言,原因是「脚本语言」泛指仅作简单程序设计任务的语言,如shell script、VBScript等只能处理简单任务的程序语言,并不能与Python相提并论。在Google内部的很多项目,例如Google应用服务引擎使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模组。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004年,Python已在Google内部使用,Google召募许多Python高手,但在这之前就已决定使用Python。他们的目的是尽量使用Python,在不得已时改用C++;在操控硬件的场合使用C++,在快速开发时候使用Python。”
title: 网络应用程序.
content: Python经常被用于Web开发。比如,通过mod_wsgi模组,Apache可以运行用Python编写的Web程序。使用Python语言编写的Gunicorn作为Web服务器,也能够运行Python语言编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的沟通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可以让程序员轻松地开发和管理复杂的Web程序。  Python对于各种网络协定的支援很完善,因此经常被用于编写服务器软件、网络爬虫。第三方函式库Twisted支援异步线上编写程序和多数标准的网络协定(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。另有gevent这个流行的第三方库,同样能够支持高性能高并发的网络开发。
title: GUI开发.
content: Python本身包含的Tkinter库能够支持简单的GUI开发。但是越来越多的Python程序员选择wxPython或者PyQt等GUI套件来开发跨平台的桌面软件。使用它们开发的桌面软件运行速度快,与用户的桌面环境相契合。通过PyInstaller还能将程序发布为独立的安装程序包。
title: 操作系统.
content: 在很多操作系统里,Python是标准的系统元件。大多数Linux发行版和Mac OS X都集成了Python,可以在终端机下直接执行Python。有一些Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器、Red Hat Linux和Fedora的Anaconda安装器。在RPM系列Linux发行版中,有一些系统组件就是用Python编写的。Gentoo Linux使用Python来编写它的Portage软件包管理系统。Python标准库包含了多个调用作业系统功能的函式库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它Windows API。使用IronPython,Python程序能够直接调用.Net Framework。
title: 科学计算.
content: NumPy、SciPy、Matplotlib可以让Python程序员编写科学计算程序。有些公司会使用Scons代替make构建C++程序。  很多游戏使用C++编写图形显示等高性能模组,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支援更多的特性和数据类型。很多游戏,如EVE Online使用Python来处理游戏中繁多的逻辑。  YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。OLPC的作业系统Sugar项目的大多数软件都是使用Python编写。
title: 实现.
content: Python是一门跨平台的脚本语言,Python规定了一个Python语法规则,根据该规则可编写Python直译器。
title: 开发环境.
title: 通用IDE / 文本编辑器.
content: 很多并非集成开发环境软件的文本编辑器,也对Python有不同程度的支持,并且加上专门为Python设计的编辑器插件也会有很高的可用性。
title: 专门为Python设计的IDE软件.
content: 适用于Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他选择。其中有些软件设计有语法着色、语法检查、运行调试、自动补全、智能感知等便利功能。由于Python的跨平台出身,这些软件往往也具备各种操作系统的版本或一定的移植性。
title: Python 3.0.
content: Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。许多针对早期Python版本设计的程序都无法在Python 3.0上正常运行。为了照顾现有程序,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。基于早期Python版本而能正常运行于Python 2.6并无警告的程序可以通过一个2 to 3的转换工具无缝迁移到Python 3.0。  新的Python程序建议使用Python 3.0版本的语法。除非运行环境无法安装Python 3.0或者程序本身使用了不支持Python 3.0的第三方库。目前不支持Python 3.0的第三方库有Twisted, PIL等。大多数第三方库都正在努力地兼容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写兼容Python 3.0版本的程序,然后使用Python 2.6, Python 2.7来运行。  Python 2.7被确定为最后一个Python 2.x版本,它除了支持Python 2.x语法外,还支持部分Python 3.1语法。
title: 主要变化.
content: Python 3.0的变化主要在以下几个方面:  print "fish" print ("fish") #注意print后面有个空格 print("fish") #print()不能带有任何其它参数 然而,Python 2.6实际已经支持新的codice_131语法:  from __future__ import print_function print("fish", "panda", sep=', ')  from __future__ import unicode_literals print(repr("fish"))  from __future__ import division print(3/2)  for k, v in d.items(): return result  result = set() for x in stuff: return result  def send_mail(from_: str, to: str, title: str, body: str) -> bool:

Summary: Python( )是一种广泛使用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。Python是ABC语言的后继者,也可以视之为一种使用传统的LISP方言。Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。