Python-,⾃由的百科
Python简介
Python
、、、、、
设计者
实现者
发⾏时间1991年,28年前
3.7.2 /
2018年12⽉23⽇
2.7.15 /
2018年5⽉1⽇
3.7.2rc1 /
2018年12⽉11⽇
3.6.8rc1 /
2018年12⽉11⽇
、、
.py、.pyw、.pyc、.pyo、.pyd、.pyz
⽹站
主要实现产品
、、、
派⽣副语⾔
、、
启发语⾔
、、、、、、、、、、
影响语⾔
、、、、、、、、
Python(英国发⾳:美国发⾳:),是⼀种⼴泛使⽤的,属于,由创造,第⼀版发布于1991年。可以视之为⼀种改良(加⼊⼀些其他编程语⾔的优点,如⾯向对象)的。作为⼀种,Python的设计哲学强调代码的和简洁的语法(尤其是使⽤划分代码块,⽽⾮使⽤⼤括号或者关键词)。相⽐于C++或Java,Python让开发者能够⽤更少的代码表达想法。不管是⼩型还是⼤型程序,该语⾔都试图让程序的结构清晰明了。
与、、、等动态类型编程语⾔⼀样,Python拥有和功能,能够⾃动管理内存使⽤,并且⽀持多种编程范式,包括⾯向对象、命令式、函数式和过程式编程。其本⾝拥有⼀个巨⼤⽽⼴泛的标准库。
Python 本⾝⼏乎可以在所有的中运⾏。Python的正式是⽤编写的、是⼀个由社驱动的⾃由,当前由管理。
⽬录
历史
Python的创始⼈为(Guido van Rossum)。
Python的创始⼈为。1989年的圣诞节期间,为了在打发时间,决⼼开发⼀个新的脚本解释程序,作为的⼀种继承。之所以选中Python作为程序的名字,是因为他是BBC电视剧——的爱好者。ABC是由吉多参加设计的⼀种教学语⾔。就吉多本⼈看来,ABC这种语⾔⾮常优美和强⼤,是专门为⾮专业程序员设计的。但是ABC语⾔并没有成功,究其原因,吉多认为是⾮开放造成的。吉多决⼼在Python中避免这⼀错误,并获取了⾮常好的效果,完美结合了和其他⼀些语⾔。
就这样,Python在吉多⼿中诞⽣了。实际上,第⼀个实现是在机上。可以说,Python是从ABC发展起来,主要受到了(另⼀种相当优美且强⼤的语⾔,为⼩型团体所设计的)的影响。并且结合了和C的习惯。
当前吉多仍然是Python的主要开发者,决定整个Python语⾔的发展⽅向。Python社经常称呼他是(BDFL)。
Python 2.0于2000年10⽉16⽇发布,增加了实现完整的,并且⽀持。同时,整个开发过程更加透明,社对开发进度的影响逐渐扩⼤。Python 3.0于2008年12⽉3⽇发布,此版不完全兼容之前的Python源代码。不过,很多新特性后来也被移植到旧的Python 2.6/2.7版本。
特性与设计哲学
Python是完全⾯向对象的语⾔。函数、模块、数字、字符串都是对象。并且完全⽀持继承、重载、派⽣、多重继承,有益于增强源代码的复⽤性。Python⽀持重载运算符,因此Python也⽀持泛型设计。相对于Lisp这种传统的函数式编程语⾔,Python对只提供了有限的⽀持。有两个标准库(functools, itertools)提供了与和中类似的函数式程序设计⼯具。
虽然Python可能被粗略地分类为“”,但实际上⼀些⼤规模软件开发计划例如、Mnet及,也⼴泛地使⽤它。Python的⽀持者较喜欢称它为⼀种⾼端动态编程语⾔,原因是“脚本语⾔”泛指仅作简单程序设计任务的语⾔,如shell script、等只能处理简单任务的编程语⾔,并不能与Python相提并论。
Python本⾝被设计为可扩展的。并⾮所有的特性和功能都集成到语⾔核⼼。Python提供了丰富的和⼯具,以便程序员能够轻松地使⽤、、来编写扩展模块。Python编译器本⾝也可以被集成到其它需要脚本语⾔的程序内。因此,有很多⼈把Python作为⼀种“”使⽤。使⽤Python将其他语⾔编写的程序进⾏集成和封装。在内部的很多项⽬,例如使⽤编写性能要求极⾼的部分,然后⽤Python或/调⽤相应的模块。《Python 技术⼿册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004年,Python已在Google内部使⽤,Google召募许多Python⾼⼿,但在这之前就已决定使⽤Python。他们的⽬的是尽量使⽤Python,在不得已时改⽤C++;在操控硬件的场合使⽤C++,在快速开发时候使⽤
Python。”
Python的设计哲学是“优雅”、“明确”、“简单”。Python开发者的哲学是“⽤⼀种⽅法,最好是只有⼀种⽅法来做⼀件事”,也因此它和拥有明显个⼈风格的其他语⾔很不⼀样。在设计Python语⾔时,如果⾯临多种选择,Python开发者⼀般会拒绝花俏的语法,⽽选择明确没有或者很少有歧义的语法。这些准则被称为“Python格⾔”。在Python解释器内运⾏import this可以获得完整的列表。
>>> import this
The Zen of Python
by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Python开发⼈员尽量避开不成熟或者不重要的优化。⼀些针对⾮重要部位的加快运⾏速度的补丁通常不会被合并到Python内。再加上因为Python属于动态类型语⾔,动态类型语⾔是在运⾏期间检查数据的类型,不得不保持描述变量值的实际类型标记,程序在每次操作变量时,需要执⾏数据依赖分⽀,⽽静态类型语⾔相对于动态类型语⾔,在声明变量时已经指定了数据类型和表⽰⽅法,根据这⼀原理导致Python相对于C、Visual Basic等静态类型语⾔来说运⾏速度较慢。不过,根据,⼤多数程序对速度要求不⾼。在某些对运⾏速度要求很⾼的情
况,Python设计师倾向于使⽤,或者⽤使⽤C/C++语⾔改写这部分程序。当前可⽤的JIT技术是。
应⽤范围
Python经常被⽤于Web开发。⽐如,通过模块,可以运⾏⽤Python编写的Web程序。使⽤Python语⾔
编写的作为Web服务器,也能够运⾏Python语⾔编写的Web程序。Python定义了标准应⽤接⼝来协调Http服务器与基于Python的Web程序之间的沟通。⼀些Web框架,如、、、、、、等,可以让程序员轻松地开发和管理复杂的Web程序。
Python对于各种⽹络协议的⽀持很完善,因此经常被⽤于编写服务器软件、⽹络爬⾍。第三⽅库⽀持异步在线编写程序和多数标准的⽹络协议(包含客户端和服务器),并且提供了多种⼯具,被⼴泛⽤于编写⾼性能的服务器软件。另有这个流⾏的第三⽅库,同样能够⽀持⾼性能⾼并发的⽹络开发。
开发
Python本⾝包含的Tkinter库能够⽀持简单的开发。但是越来越多的Python程序员选择或者等GUI包来开发跨平台的桌⾯软件。使⽤它们开发的桌⾯软件运⾏速度快,与⽤户的桌⾯环境相契合。通过还能将程序发布为独⽴的安装程序包。
操作系统
在很多操作系统⾥,Python是标准的系统组件。⼤多数Linux发⾏版和Mac OS X都集成了Python,可以在终端机下直接运⾏Python。有⼀些Linux发⾏版的安装器使⽤Python语⾔编写,⽐如Ubuntu的Ubiquity安装器、和Fedora的Anaconda安装器。在RPM系列Linux发⾏版中,有⼀些系统组件就是⽤P
ython编写的。Gentoo Linux使⽤Python来编写它的Portage。Python标准库包含了多个调⽤作业系统功能的库。通过pywin32这个第三⽅软件包,Python能够访问Windows的COM服务及其它Windows API。使⽤IronPython,Python程序能够直接调⽤.Net Framework。
科学计算
、、可以让Python程序员编写科学计算程序。有些公司会使⽤代替make构建C++程序。
很多游戏使⽤C++编写图形显⽰等⾼性能模块,⽽使⽤Python或者编写游戏的逻辑、服务器。相较于Python,的功能更简单、体积更⼩;⽽Python则⽀持更多的特性和数据类型。很多游戏,如使⽤Python来处理游戏中繁多的逻辑。
YouTube、Google、Yahoo!、NASA都在内部⼤量地使⽤Python。的作业系统Sugar项⽬的⼤多数软件都是使⽤Python编写。
Hello World
⼀个在标准输出设备上输出的简单程序,这种程序通常作为开始学习编程语⾔时的第⼀个程序:
适⽤于Python 3.0以上版本以及Python 2.6、Python 2.7
print("Hello, world!")
适⽤于Python 2.6以下版本
print"Hello, world!"
单步运⾏
Python也可以单步解释运⾏。运⾏Python解释器进⼊交互式命令⾏的环境,你可以在提⽰符号>>>旁输⼊print("Hello, world!"),按Enter 键输出结果:
适⽤于Python 3.0以上版本以及Python 2.6、Python 2.7
>>> print('Hello, world!')
Hello, world!
适⽤于Python 2.7以下版本
>>> print"Hello, world!"
Hello, world!
注意,在3.0及以上版本中,需要在"Hello,world"周围加上圆括号。其原因是在3.0及以上版本中,print命令不再是⼀个关键字,⽽是⼀个函数。
语法
Python的设计⽬标之⼀是让代码具备⾼度的可阅读性。它设计时尽量使⽤其它语⾔经常使⽤的标点符号和英⽂单字,让代码看起来整洁美观。因为Python是动态语⾔,它不像其他的静态语⾔如、那样需要书写声明语句。
缩进
Python开发者有意让违反了缩进规则的程序不能通过解释,以此来强迫程序员养成良好的编程习惯,也⽅便所有⼈查和阅读。并且Python 语⾔利⽤缩进表⽰语句块的开始和结束(),⽽⾮使⽤花括号或者某种。增加缩进表⽰语句块的开始,⽽减少缩进则表⽰语句块的结束。缩进成为了语法的⼀部分。例如if语句:
if age < 21:
print("你不能買酒")#美國法律規定21歲以下的⼈不能購買酒
print("不過你能買⼝⾹糖")
print("這句話處於if語句塊的外⾯")
注:上述例⼦为Python 3.0以上版本的代码。
根据的规定,必须使⽤4个空格来表⽰每级缩进。使⽤Tab字符和其它数⽬的空格虽然都可以被解释器识别,但不匹配编码规范。⽀持Tab字符和其它数⽬的空格仅仅是为兼容很旧的Python程序和某些有问题的编辑程序。偏向使⽤Tab字符的程序员可以设置⽂本编辑器将Tab键转换为4个空格实现缩进⽽不致导致缩进错误。
标识符
_单下划线开头:弱“内部使⽤”标识。对于“from M import *”,将不导⼊所有以下划线开头的对象,包括包、模块、成员。
单下划线结尾_:为了避免与python关键字的命名冲突
__双下划线开头:模块内的成员,表⽰私有成员,外部⽆法直接调⽤
__双下划线开头双下划线结尾__:指那些包含在⽤户⽆法控制的名字空间中的“魔术”对象或属性,如类成员的name 、doc、init、import、file、等。推荐永远不要将这样的命名⽅式应⽤于⾃⼰的变量或函数。
语句和控制流
if语句,当条件成⽴时运⾏语句块。经常与else, elif(相当于else if)配合使⽤。
for语句,遍历列表、字符串、字典、集合等,依次处理迭代器中的每个元素。
while语句,当条件为真时,循环运⾏语句块。
try语句。与except, finally, else配合使⽤处理在程序运⾏中出现的异常情况。
class语句。⽤于定义类型。
def语句。⽤于定义函数和类型的⽅法。
pass语句。表⽰此⾏为空,不运⾏任何操作。
assert语句。⽤于程序调适阶段时测试运⾏条件是否满⾜。
with语句。Python2.6以后定义的语法,在⼀个场景中运⾏语句块。⽐如,运⾏语句块前加锁,然后在语句块运⾏结束后释放锁。
yield语句。在迭代器函数内使⽤,⽤于返回⼀个元素。⾃从Python 2.5版本以后。这个语句变成⼀个运算符。
raise语句。抛出⼀个异常。
import语句。导⼊⼀个模块或包。常⽤写法:from module import name, import module as name, from module import name as anothername
表达式
Python的表达式写法与C/C++类似。只是在某些写法有所差别。
主要的算术运算符与C/C++类似。+, -, *, /, //, **, ~, %分别表⽰加法或者取正、减法或者取负、乘法、除法、整除、乘⽅、取反、取余数。>>, <<;表⽰右移和左移。&, |, ^表⽰⼆进制的AND, OR, XOR运算。>, <, ==, !=, <=, >=⽤于⽐较两个表达式的值,分别表⽰⼤于、⼩于、等于、不等于、⼩于等于、⼤于等于。在这些运算符⾥⾯,~, |, ^, &, <<, >>必须应⽤于整数。
Python使⽤and, or, not表⽰逻辑运算。
is, is not⽤于⽐较两个变量是否是同⼀个对象。in, not in⽤于判断⼀个对象是否属于另外⼀个对象。
Python⽀持字典、集合、列表的推导式(dict comprehension, set comprehension, list comprehension)。⽐如:
>>> [x + 3 for x in range(4)]
[3, 4, 5, 6]
>>> {x + 3 for x in range(4)}
{3, 4, 5, 6}
>>> {x: x + 3 for x in range(4)}
{0: 3, 1: 4, 2: 5, 3: 6}
Python⽀持“迭代表达式”(generator comprehension),⽐如计算0-9的平⽅和:
>>> sum(x * x for x in range(10))
285
Python使⽤lambda表⽰。匿名函数体只能是表达式。⽐如:
>>> add = lambda x, y : x + ypython 爬虫教学
>>> add(3, 2)
5
Python使⽤y if cond else x表⽰条件表达式。意思是当cond为真时,表达式的值为y,否则表达式的值为x。相当于C++和Java⾥的cond?
y:x。
Python区分列表(list)和元组(tuple)两种类型。list的写法是[1,2,3],⽽tuple的写法是(1,2,3)。可以改变list中的元素,⽽不能改变tuple。在某些情况下,tuple的括号可以省略。tuple对于赋值语句有特殊的处理。因此,可以同时赋值给多个变量,⽐如:
>>> x, y=1, 2 #同时给x,y赋值,最终结果:x=1, y=2
特别地,可以使⽤以下这种形式来交换两个变量的值:
>>> x, y = y, x #最终结果:y=1, x=2
Python使⽤'(单引号)和"(双引号)来表⽰字符串。与Perl、Unix Shell语⾔或者Ruby、Groovy等语⾔不⼀样,两种符号作⽤相同。
⼀般地,如果字符串中出现了双引号,就使⽤单引号来表⽰字符串;反之则使⽤双引号。如果都没有出现,就依个⼈喜好选择。出现在字符串中的\(反斜杠)被解释为特殊字符,⽐如\n表⽰换⾏符。表达式前加r指⽰Python不解释字符串中出现的\。这种写法通常⽤于编写正则表达式或者Windows⽂件路径。
Python⽀持列表切割(list slices),可以获取完整列表的⼀部分。⽀持切割操作的类型有str, bytes, list, tuple等。它的语法是...[left:right]或者...[left:right:stride]。假定nums变量的值是[1, 3, 5, 7, 8, 13, 20],那么下⾯⼏个语句为真:
nums[2:5] == [5, 7, 8]从下标为2的元素切割到下标为5的元素,但不包含下标为5的元素。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论