2019独角兽企业重金招聘Python工程师标准>>>
什么是 Python
Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。它可以帮你完成工作,而且一段时间以后,你还能看明白自己写的这段代码。你会对自己如此快地学会它和它强大的功能感到十分的惊讶,更不用提你已经完成的工作了!只有你想不到,没有 Python 做不到。
面向对象
面向对象编程为数据和逻辑相分离的结构化和过程化编程添加了新的活力。面向对象编程支持将特定的行为、特性以及和/或功能与它们要处理或所代表的数据结合在一起。
Python 的面向对象的特性是与生俱来的。然而,Python 绝不想 Java 或 Ruby仅仅是一门面向对象语言,事实上它融汇了多种编程风格。例如,它甚至借鉴了一些像 Lisp 和 Haskell 这样的函数语言的特性。
可升级
Python 提倡简洁的代码设计、高级的数据结构和模块化的组件,这些特点可以让你在提升项目的范围和规模的同时,确保灵活性、一致性并缩短必要的调试时间。
“可升级”这个术语最经常用于衡量硬件的负载,通常指为系统添加了新的硬件后带来的性能提升。我们乐于在这里对这个引述概念加以区分,我们试图用“可升级”来传达一种观念,这就是:Python 提供了基本的开发模块,你可以在它上面开发你的软件,而且当这些需要扩展和增长时,Python 的可插入性和模块化架构则能使你的项目生机盎然和易于管理。
可扩展
代码中的瓶颈, 可能是在性能分析中总排在前面的那些热门或者一些特别强调性能的地方, 可以作为Python 扩展用 C 重写。需要重申的是,这些接口和纯 Python 模块的接口是一模一样的,乃至代码和对象的访问方法也是如出一辙的。唯一不同的是,这些代码为性能带来了显著的提升。自然,这全部取决你的应用程序以及它对资源的需求情况。很多时候,使用编译型代码重写程序的瓶颈部分绝对是益处多多的,因为它能明显提升整体性能。
程序设计语言中的这种可扩展性使得工程师能够灵活附加或定制工具,缩短开发周期。虽然像 C、C++乃至 Java 等主流第三代语言(3GL)都拥有该特性,但是这么容易地使用 C 编写扩展确实是 Python 的优势。此外, 还有像 PyRex 这样的工具, 允许 C 和 Python 混合编程, 使编写扩展更加轻而易举,因为它会把所有的代码都转换成 C 语言代码。
因为 Python 的标准实现是使用 C 语言完成的(也就是 CPython) ,所以要使用 C 和 C++ 编写 Python 扩展。Python 的 Java 实现被称作 Jython,要使用 Java 编写其扩展。最后, 还有IronPython,这是针对 .NET 或 Mono 平台的 C# 实现。你可以使用 C# 或者 VB.Net 扩展 IronPython。
可移植性
在各种不同的系统上可以看到 Python 的身影,这是由于在今天的计算机领域,Python 取得了持续快速的成长。因为 Python 是用 C 写的,又由于 C 的可移植性,使得 Python 可以运行在任何带有 ANSI C 编译器的平台上。尽管有一些针对不同平台开发的特有模块,但是在任何一个平台上用 Python 开发的通用软件都可以稍事修改或者原封不动的在其他平台上运行。这种可移植性既适用于不同的架构,也适用于不同的操作系统。
内存管理器
C 或者 C++最大的弊病在于内存管理是由开发者负责的。所以哪怕是对于一个很少访问、修改和管理内存的应用程序,程序员也必须在执行了基本任务之外履行这些职责。这些加诸在开发者身上的没有必要的负担和责任常常会分散精力。
在 Python 中,由于内存管理是由 Python 解释器负责的,所以开发人员就可以从内存事务中解放出来,全神贯注于最直接的目标,仅仅致力于开发计划中首要的应用程序。这会使错误更少、程序更健壮、开发周期更短。
解释性和(字节)编译性
Python 是一种解释型语言,这意味着开发过程中没有了编译这个环节。一般来说,由于不是以本地机器码运行, 纯粹的解释型语言通常比编译型语言运行的慢。然而,类似于 Java,Python实际上是字节编译的, 其结果就是可以生成一种近似机器语言的中间形式。这不仅改善了 Python的性能,还同时使它保持了解释型语言的优点。
核心笔记:文件扩展名
Python 源文件通常用.py 扩展名。当源文件被解释器加载或者显式地进行字节码编译的时候会被编译成字节码。由于调用解释器的方式不同,源文件会被编译成带有.pyc 或.pyo 扩展名的文件。
下载和安装 Python
得到所有 Python 相关软件最直接的方法就是去访问它的网站(http://python.org)。当前针对大多数平台的 Python 版本,主要集中在“三巨头”身上:Unix,Win32 和 MacOS X。
具体安装步骤:网上自查,Python书籍中也有很多讲解,不再赘述。
运行 Python
有三种不同的办法来启动 Python。最简单的方式就是交互式的启动解释器,每次输入一行Python 代码来执行。另外一种启动 Python 的方法是运行 Python 脚本。这样会调用相关的脚本解释器。最后一种办法就是用集成开发环境中的图形用户界面运行 Python。集成开发环境通常整合了其他的工具,例如集成的调试器、文本编辑器,而且支持各种像 CVS 这样的源代码版本控制工具。
具体运行步骤:网上自查,Python书籍中也有很多讲解,不再赘述。
比较 Python(Python 与其他语言的比较)
Python 已经和很多语言比较过了。一个原因就是 Python 提供了很多其他语言拥有的特性。另外一个原因就是 Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。Python 就是”浓缩的精华“:范·罗萨姆研究过很多语言,从中吸收了许多觉得不错的特性,并将它们溶于一炉。
然而, 往往因为 Python 是一门解释型语言, 你会发现大多数的比较是在 Perl、Java、Tcl, 还有JavaScript 之间进行的。Perl 是另外一种脚本语言,远远超越了标准的 shell 脚本。像
Python 一样,Perl 赋予了你所有编程语言的功能特性,还有系统调用能力。Perl 最大的优势在于它的字符串模式匹配能力,其提供了一个十分强大的正则表达式匹配引擎。这使得 Perl 实际上成为了一种用于过滤、识别和抽取字符串文本的语言,而且它一直是开发 Web 服务器端 CGI(common gateway interface,通用网关接口)网络程序的最流行的语言。Python 的正则表达式引擎很大程度上是基于Perl 的。
然而,Perl 语言的晦涩和对符号语法的过度使用,让解读变得很困难。这些语法令初学者不得精要,为他们的学习带来了不小的阻碍。Perl 的这些额外的“特色”使得完成同一个任务会有多个方法, 进而引起了开发者之间的分歧和内讧。最后, 通常当你想阅读几个月前写的 Perl 脚本的时候都不得不求助参考书。
Python 也经常被拿来和 Java 作对比,因为他们都有类似的面向对象的特性和语法。Java 的语法尽管比 C++简单的多,但是依旧有些繁琐,尤其是当你想完成一个小任务的时候。Python 的简洁比纯粹的使用 Java 提供了更加快速的开发环境。在 Python 和 Java 的关系上,一个非常重大的革命就是Jython 的开发。Jython 是一个完全用 Java 开发的 Python 解释器,现在可以在只有 Java 虚拟机的环境中运行 Python 程序。
我们会在后面的章节中简单讲述 Jython 的更多优点,但是现在就可以告诉你:在 Jython 的脚本环境中,你可以熟练地处理 Java 对象,Java 可以和 Python 对象进行交互,你可以访问自己的 Java 标准类库,就如同 Java 一直是 Python 环境的一部分一样。
现在,由于 Rails 项目的流行,Python 也经常被拿来和 Ruby 进行比较。就像前面我们提到的,Python 是多种编程范式的混合,它不像 Ruby 那样完全的面向对象,也没有像 Smalltalk 那样的块, 而这正是 Ruby 最引人注目的特性。Python 有一个字节码解释器, 而 Ruby 没有。Python 更加易读,而 Ruby 事实上可以看作是面向对象的 Perl。相对于 Rails,Python 有几个自己的Web 应用框架,比如 Django 和 Turbogears 这两个项目。
Tcl 是另一种可以与 Python 相提并论的脚本语言。Tcl 是最易于使用的脚本语言之一, 程序员很容易像访问系统调用一样对 Tcl 语言进行扩展。Tcl 直到今天仍然很流行, 与 Python 相比, 它或许有更多局限性(主要是因为它有限的几种数据类型), 不过它也拥有和 Python 一样的通过扩展超越其原始设计的能力。更重要的是, Tcl 通常总是和它的图形工具包 Tk 一起工作, 一起协同开发图形用户界面应用程序。因为它非常流行, 所以 Tk 已经被移植到Perl(Perl/Tk)和 Python(Tkinter)中. 同样有一个有争议的观点,那就是与 Tcl 相比, 因为Python 有类, 模块及包的机制,所以写起大程序来更加得心应手。
Python 有一点点函数化编程(functional programming ,FP)结构,这使得它有点类似List 或 Scheme 语言。尽管 Python 不是传统的函数化编程语言, 但它持续的从 Lisp 和 haskell 语言中借用一些有价值的特性。举例来说, 列表解析就是一个广受欢迎的来自 Haskell 世界的特性, 而 Lisp 程序员在遇到 lambda, map, filter 和 reduce 时也会感到异常亲切。
优秀的 JavaScript 程序员,JavaScript 是另外一种非常类似 Python 的面向对象脚本语言。学起 Python 来易如反掌。聪慧的读者会注意到 JavaScript 是基于原型系统的, 而 Python 则遵循传统的面向对象系统, 这使得二者的类和对象有一些差异。
其它实现
标准版本的 Python 是用 C 来编译的, 又叫 CPython. 除此之外, 还有一些其它的 Python 实现。
Jython:尽管两种解释器之间存在一些细微的差别, 但是它们非常接近, 而且启动环境也完全相同。那 Jython 又有哪些优势呢?
1. 只要有 Java 虚拟机, 就能运行 Jython
2. 拥有访问 Java 包与类库的能力
3. 为 Java 开发环境提供了脚本引擎
4. 能够很容易的测试 Java 类库
5. 提供访问 Java 原生异常处理的能力
6. 继承了 JavaBeans 特性和内省能力
7. 鼓励 Python 到 Java 的开发(反之亦然)
8. GUI 开发人员可以访问 Java 的 AWT/Swing 库
9. 利用了 Java 原生垃圾收集器(CPython 未实现此功能)