python编程介绍_重学编程之Python介绍

Python由吉多·范罗苏姆创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式的LISP方言[6]。

Python的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进划分代码块。相比于C或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。

Python解释器本身几乎可以在所有的操作系统中运行。Python的官方解释器CPython是用C语言编写的,它是一个由社区驱动的自由软件,目前由Python软件基金会管理。

Python的历史

Python的创始人为吉多·范罗苏姆,当时他在阿姆斯特丹的荷兰数学和计算机科学研究学会工作。1989年的圣诞节期间,吉多·范罗苏姆为了在打发时间,决心开发一个新的脚本解释编程,作为ABC语言的一种继承,替代使用Unix shell和C语言进行系统管理,担负同Amoeba操作系统的交互和异常处理[7]。之所以选中Python作为编程的名字,是因为他是BBC电视剧——蒙提·派森的飞行马戏团的爱好者[8]。范罗苏姆作为Python的主要开发者独自担负这个项目的职责,直到2018年7月12日,他宣布从作为终身仁慈独裁者(BDFL)的职责上“永久休假”,Python社区向他授予这个头衔反映了他长期担任整个Python语言的发展方向的决策者[9]。他在2019年1月至11月于参与了一个五人掌控委员会继续领导项目发展[10][11]。

在1991年2月,范罗苏姆发布了最初代码(标记为版本0.9.0)于alt.sources[12],这时就已经存在了带继承的类、异常处理、函数和核心数据类型list、dict、str等。在这个最初发行中就有了从Modula-3引进的模块系统[13],它的异常模型也类似于Modula-3,但增加了else子句[7]。在1994年1月Python达到了版本1.0。这个发行版主要新特征是包括了函数式编程工具lambda、map、filter和reduce[14]。Python 1.4增加了受Modula-3启发的关键字参数和对复数的内建支持,还包含采取名字修饰的一种基本形式的数据隐藏[15]。

Python 2.0于2000年10月16日发布,介入了列表推导式,这是从函数式编程语言SETL和Haskell中引入的。它还向垃圾收集系统增加了环检测算法,并且支持Unicode[16]。Python 2.1支持了嵌套作用域,就像其他静态作用域语言一样[17]。Python 2.2的重大革新是将Python的类型(用C写成)和类(用Python写成)统一入一个层级,使得Python的对象模型成为纯粹和一致的面向对象的模型[18];还增加了受CLU启发的迭代器[19],受Icon启发的生成器[20],和描述器协议[21]。Python 2.4加入了集合数据类型,和函数修饰器[22]。Python 2.5加入了with语句[23]。

Python 3.0于2008年12月3日发布,它对语言做了较大修订而不能完全后向兼容[24]。Python 3发行包括了2to3实用工具,它(至少部分的)自动将Python 2代码转换成Python 3代码[25]。

Python 3的很多新特性后来也被移植到旧的Python 2.6/2.7版本中[26]。Python 2.7的产品寿命结束日期最初设定为2015年,出于对大量的现存代码不能前向移植到Python 3的关切而延期至2020年[27][28]。

在2019年11月,活跃的Python核心开发者选举Barry Warsaw、Brett Cannon、Carol Willing、Thomas Wouters和Victor Stinner为“掌控委员会”的五位成员来领导这个项目[29]。

特征与设计哲学

Python是多范型编程语言。它完全支持面向对象编程和结构化编程,还有很多特征支持函数式编程和元编程包括元类[30]和元对象(魔术方法)[31]。通过扩展还可以支持很多范型,包括面向切面编程[32]、契约式设计[33][34]和逻辑编程[35]。

Python使用动态类型,在内存管理上采用引用计数和环检测相结合的垃圾收集器[36]。它的特征还有动态名字解析(后期绑定),即在程序执行期间绑定方法和变量的名字。

Python对遵循Lisp传统的函数式编程提供了有限的支持[37],它提供了 filter、map、reduce函数;列表推导式、字典、集合和生成器表达式[38]。标准库中有两个模块(functools和itertools)实现了从Haskell和Standard ML取来的函数式工具[39]。

Python的设计哲学是“优雅”、“明确”、“简单”。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,也因此它和拥有明显个人风格的其他语言很不一样。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。这些准则被称为“Python之禅”。在Python解释器内运行import this可以获得完整的列表,下面是其中首要:优美优于丑陋。明了优于隐晦。

简单优于复杂。复杂优于凌乱。

扁平优于嵌套。稀疏优于稠密。

可读性很重要。

Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。Python的官方实现是CPython,它将Python程序编译成中间形式的字节码[40],并接着在它的虚拟机上执行[41];再加上因为Python属于动态类型语言,动态类型语言是在运行期间检查数据的类型,故而导致Python相对于C/C++等编译成机器码的静态类型语言来说运行速度较慢。不过,根据二八定律,大多数编程对速度要求不高。在某些对运行速度要求很高的情况,Python设计师可以使用JIT技术的PyPy,或者是将Python脚本翻译成C的Cython,还可以将时间关键的函数迁移至用C语言编写的扩展模块中。

Python本身被设计为可扩展的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、Cython来编写扩展模块。Python编译器本身也可以被集成到其它需要脚本语言的编程内。因此,有很多人把Python作为一种“胶水语言”使用。使用Python将其他语言编写的编程进行集成和封装。

Python简介及应用领域

Python是一种解释型脚本语言,可以应用于以下领域: [2]Web 和 Internet开发

科学计算和统计

人工智能

桌面界面开发

软件开发

后端开发

网络爬虫

风格

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。这在由Tim Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one-- and preferably only one --obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。

Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。

一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

设计定位

编辑

Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。

Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。

Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。

虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。

Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google 内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用C++,在快速开发时候使用 Python。”

执行

Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。基于C的Python编译出的字节码文件,通常是.pyc格式。除此之外,Python还可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下直接运行Python交互环境。直接下达操作指令即可实现交互操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值