本章介绍了Python的背景知识,包括什么是Python、Python的起源以及Python的一些关键特性。
1 什么是Python
Python是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。
2 起源
贵铎·范·罗萨姆(Guido van Rossum)于1989年底始创了Python;1991年初,Python发布了第一个公开发行版。
3 特点
3.1 高级
Python是一门强大的、可以进行系统调用的解释型脚本语言;内建有常用的高级数据结构,比如列表(大小可变数组)和字典(哈希表),易读,可缩短开发时间和代码量。
3.2 面向对象
面向对象编程为数据和逻辑相分离的结构化和过程化编程添加了新的活力。
3.3 可升级
Python提供了基本的开发模块,可以在它上面开发软件;而且当这些需要扩展和增长时,Python的可插入性和模块化架构则能使项目易于管理。
3.4 可扩展
代码中的瓶颈,可以作为Python扩展用C重写。Python的标准实现使用C语言完成(也就是CPython),所以要使用C和C++编写Python扩展。
Python的Java实现被称作Jython,要使用Java编写其扩展。
Python针对.NET或Mono平台的C#实现称为IronPython,可以使用C#或者VB.Net扩展。
3.5 可移植性
Python是用C写的,又由于C的可移植性,使得Python可以运行在任何带有ANSI C编译器的平台上。
3.6 易学
关键字少、结构简单、语法清晰。
3.7 易读
没有命令式符号——美元符号($)、分号(;)、波浪号(~)等等。
3.8 易维护
Python本身易学+易读=>易维护
3.9 健壮性
一旦Python由于错误崩溃,解释程序就会转出一个“堆栈跟踪”,里面有可用到的全部信息,包括程序崩溃的原因以及出错的段代码(文件名、行数、函数调用等等)。
3.10 高效的快速原型开发工具
Python有许多面向其他系统的接口,它的功能足够强大,本身足够强壮,所以完全可以使用 Python 开发整个系统的原型。
Python标准库很完备,第三方模块或包也很多。对于所要做的全部事情,就是来个“即插即用”(当然,也要自行配置一番)。
3.11 内存管理器
内存管理由解释器负责,能减少错误,节省开发时间。
3.12 解释性 和 (字节)编译性
Python是一种解释型语言,而Python实际上是字节编译的,其结果生成一种近似机器语言的中间形式。
Python源文件用.py扩展名,当源文件被解释器加载或者显式地进行字节码编译时,会被编译成字节码。根据调用解释器的方式不同,源文件会被编译成.pyc或.pyo文件。
4 安装Python
最新的Linux、MacOS已经安装好;Windows系统可到 python.org/downloads/ 自己下载安装。
5 运行Python
5.1 命令行上的交互解释器
Linux:检查登陆启动脚本,找到set path 或 PATH= 命令,添加解释器完整路径。
Windows:将安装路径添加到搜索路径中(计算机->属性->高级系统设置->高级->环境变量->系统变量->Path)。
添加路径之后,在 命令行/DOS 中输入Python,即可启动Python解释器。
5.2 命令行上启动脚本
Linux:①通过解释器执行
$ python script.py
②直接执行。在脚本第一行使用shell魔术字符串
#!/usr/bin/python
以上是在Python安装在/usr/local/bin/目录下时使用,如果不知道Python路径,可用
#!/usr/bin/env python
env通常位于/usr/bin/或/bin/目录中,它可以在PATH目录中查找,也规定了一些系统环境变量。
如果将解释器路径写死在脚本文件中,可能在有些系统中找不到解释器而产生错误。
Windows:①同Linux,通过解释器执行。
②在安装了带有PythonWin的Python时,双击即可执行。
6 Python文档
Windows系统:安装Python后,在 安装文件夹\Doc\ 里有一个Python2x.chm的离线文档。
原书网站提供大多数Python版本的文档:http://corepython.com,单击左侧的“Python Docs”
7 和其他语言比较
Perl:脚本语言,远超标准shell脚本,正则表达式匹配引擎强大(Python即基于此);
语言晦涩,符号语法过度使用,学习困难。
Java:语法繁琐。
Ruby:完全的面向对象,没有字节码解释器。
Tcl:可与Python相提并论;数据类型有局限。
List:Python借用其一些有价值的特性。
JavaScript:非常类似Python,学好JavaScript后学Python易如反掌;基于原型系统,而Python遵循传统的面向对象系统。
8 其他
CPython的一个局限就是每个Python函数调用都会产生一个C函数调用(栈帧),即同时产生的函数调用有限,因此Python难以实现用户级的线程库和复杂递归应用。
可以通过使用一个“stackless”的Python实现来突破这个限制,一个C栈帧可以拥有任意数量的Python栈帧。这样就能够拥有几乎无穷的函数调用,并能支持巨大数量的线程。
Stackless唯一的问题就是它要对现有的CPython解释器做重大修改,所以它几乎是一个独立的分支。
另一个名为Greenlets的项目也支持微线程,它是一个标准的C扩展,因此不需要对标准Python解释器做任何修改。
通过以下网址你能了解更多信息:
习题1.5
编写脚本,建立自动运行代码行,输出"Hello World!"
#!/usr/bin/env python
print 'Hello World'
1-5