Python
一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了脚本语言和解释语言的易用性。
一、Python 的历史
Python是由创始人贵铎·范·罗萨姆(Guido van Rossum)在阿姆斯特丹于1989年圣诞节期间,为了打发圣诞节的无趣,开发的一个新的解释型脚本语言。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是BBC当时正在热播的喜剧连续剧“Monty Python”的爱好者。
Guido van Rossum Python的第一个公开发行版发行于1991年,它是纯粹的自由软件, 源代码和解释器(CPython)都遵循 GPL(GNU General Public License)协议。
二、Python 的设计思想
Python被设计成是 “符合大脑思维习惯” 的,采用极简主义的设计理念,加以统一规范的交互模式。这使得Python易于学习、理解和记忆。Python 开发者的哲学是 “用一种方法,最好是只有一种方法来做一件事”。
Python是完全面向对象的编程语言,函数、模块、数字、字符串等内置类型都是对象。它的类支持多态、操作符重载、和多重继承等高级OOP概念,并且Python特有的简洁的语法和类型使得OOP十分易于使用。当然OOP只是Python的一个选择而已,就像C++一样,Python既支持面向对象编程,也支持面向过程编程的模式。
Python是一种解释型语言,目前Python的标准实现方式是将源代码的语句编译(转换)为字节码格式,然后通过解释器将字节码解释出来。Python没有将代码编译成底层的二进制代码,所以相较于C和C++等编译型语言,Python的执行速度会慢一些。但是Python的解释型语言特性提高了开发者开发速度,同时使它拥有解释型语言易于编写和调试等优点。
Python本身被设计为可扩展的,并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C/C++语言来编写扩充模块。Python为我们提供了非常完善的基础代码库,覆盖了正则表达式、网络、多线程、GUI、数据库、等领域。除了内置的库外,Python还有大量的第三方库,供你直接使用。
Python编译器本身也可以被集成到其它需要脚本语言的程序内,因此,很多人还把Python作为一种“胶水语言”(glue language)使用,使用Python将其他语言编写的程序进行集成和封装。2004 年,Python 已在Google 内部使用。Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。他们的目的是 “Python where we can, C++ where we must",在操控硬件的场合使用 C++,在快速开发时候使用 Python。
注:我们在任意一个 Python 的交互解释器中输入:import this 命令,就可以看到Python的设计原则。EIBTI就是 “明了胜于晦涩” 的简写。
三、Python 的优点
1、软件质量高
Python秉承了简洁、清晰的语法,以及高度一致的编程模式。始终如一的设计风格,可以保证开发出相当规范的代码。
针对错误,Python 提供了“安全合理”的退出机制。Python支持异常处理,能有效捕获和处理程序运行时发生的错误,使你能够监控这些错误并进行处理。
Python代码能打包成模块和包,方便管理和发布,很适合团队协同开发。
2、开发速度快
Python致力于开发速度的最优化:简洁的语法、动态的类型、无需编译、丰富的库支持等特性使得程序员可以快速的进行项目开发。Python往往只要几十行代码就可以开发出需要几百行C代码的功能。
Python解析器能很方便地进行代码调试和测试,也可作为一个编程接口嵌入一个应用程序中。 这就使的在开发过程中可以直接进行调试,而避免了耗时而又麻烦的编译过程,大大提高了开发的速度和效率。
在Python 中,由于内存管理是由Python 解释器负责的,所以开发人员就可以从内存管理事务中解放出来,仅仅致力于开发计划中首要的应用程序设计。这使得Python编写的程序错误更少、更加健壮、开发周期更短。
3、功能强大
Python的功能足够强大,本身也足够强壮, 它还有许多面向其他系统的接口,所以完全可以使用 Python 开发整个系统的原型。
为了完成更多特定的任务,Python内置了许多预编码的库工具,从正则表达式到网络编程,再到数据库编程都支持。在web领域、数据分析领域等,Python还有强大的框架帮你快速开发你的服务。例如:Django、TruboGears、Pylons等。
4、易于扩展
Python易于扩展,(对于CPython)可以通过C或C++编写的模块进行功能扩展,使其能够成为一种灵活的黏合语言,可以脚本化处理其他系统和组件的行为。
5、跨平台
Python是跨平台的。在各种不同的操作系统上(Linux、windows、MacOS、Unix等)都可以看到Python 的身影。因为Python 是用C 写的,又由于C 的可移植性,使得Python 可以运行在任何带有ANSI C 编译器的平台上。尽管有一些针对不同平台开发的特有模块,但是在任何一个平台上用Python 开发的通用软件都可以稍事修改或者原封不动的在其他平台上运行。这种可移植性既适用于不同的架构,也适用于不同的操作系统。
四、Python 的缺点
第一个缺点就是运行速度慢。和C/C++程序相比Python的运行速度非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。不过,根据二八定律,大多数程序对速度要求不高。某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。
而且你自己的时间是宝贵的资源,比CPU时间更珍贵。Python开发速度带来的效益往往比执行速度带来的损失更为重要,尤其是在现代计算机高速的处理能力情况下。 一些改进可能太难以实现,或者可能影响代码的可移植性或可维护性。 并非所有的性能改进都值得付出努力。
第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码。这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码发布出去。要从机器码完整反推出C代码是不可能的。
五、Python 的开发方向和应用场景
Web网络开发:
Python提供丰富的模块支持sockets编程,多线程编程,能方便快速地开发网络服务程序。支持最新的XML技术,支持json语言,数据库编程,而且Python的ORM框架,使得操作数据库非常方便。
Python还有优秀的Django、Tornado、Flask等web开发框架,还用众多的开源插件的支持,足以适用各种不同的web开发需求。
自动化运维:
Python对操作系统服务的内置接口,使其成为编写可移植的维护操作系统的管理工具和部件的理想工具。Python程序可以搜索文件和目录树,可以运行其他程序,可以使用进程和线程并行处理。
网络爬虫:
在文本处理方面,python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
图形处理:
有PIL、Tkinter等图形库支持,能方便进行图形处理。 多媒体应用 ,Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二和三维图像处理。PyGame模块可用于编写游戏软件
除此之外,Python还应用于游戏、人工智能、大数据分析、机器人等领域。
六、Python的种类
Cpython:
执行过程:程序----(c解释器)----(字节码)----(机器码)-----cpu
Python的官方版本,这是Python初始的以及维护得最好的实现,使用C编写。新的语言特性一般会最先在这里出现。CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
Jyhton:
执行过程:程序----(java解释器)----(字节码)----(机器码)-----cpu
Python的Java实现,此实现可用作Java应用程序的脚本语言,或可用于使用Java类库创建应用程序,它也经常用于为Java库创建测试。Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
PyPy:
执行过程:程序----(字节码)----(机器码)-----cpu
完全用Python编写的Python实现。它支持在其他实现中没有找到的几个高级功能,如stackless支持和一个Just in Time编译器。PyPy将Python的源码翻编译成字节码再编译成机器码。
其他类别:Python for .NET、IronPython、RubyPython、Brython ...
七、Python版本
python有两个版本,python 2.X和python 3:
python 2.x的最后一个版本是python2.7(于2010年发布),官方将支持到2020年。
python 3.X的第一个版本python 3.0(于2008年发布)
python 3.X不兼容 Python 2.X版本,官方也有发布python2.6作为过渡到Python 3.0的版本,2.6之后的版本都为过渡版本。
为什么要开发 Python 3.X版本呢?因为 python发展了20多年,里面有很多重复的功能,重复的模块,很多代码也变得不那么简洁,所以Guido决定进行一次彻底的升级,原则是去繁从简,从而有了后续的 Python 3.X版本。