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让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。

Python (Programmiersprache): Python ([], [], auf Deutsch auch []) ist eine universelle, üblicherweise interpretierte, höhere Programmiersprache. Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern. So werden beispielsweise Blöcke nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert. Wegen ihrer klaren und übersichtlichen Syntax gilt Python als einfach zu erlernen.