python 简介
1 Python 定义
Python 是一种简单易学并且结合了解释性、编译性、互动性和面向对象的脚本语言。Python 提供了高级数据结构,它的语法和动态类型以及解释性使它成为广大开发者的首选编程语言。
Python 是解释型语言: 开发过程中没有了编译这个环节。类似于 PHP 和 Perl 语言。
Python 是交互式语言: 可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: Python 支持面向对象的风格或代码封装在对象的编程技术。
2 Python 发展史
2.1 Python 的发展
Python 的创始人为 Guido van Rossum。1989 年,Guido 为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ABC 语言的一种继承。
Python 是由其他语言发展而来的,其中主要包括 ABC、Modula-3、C、C++、SmallTalk、Unix shell 等。
自从 2004 年以后,python 的使用率呈线性增长。
Python 2 于 2000 年 10 月 16 日发布,稳定版本是 Python 2.7。Python 3 于 2008 年 12 月 3 日发布,不完全兼容 Python 2。2011 年 1 月,它被 TIOBE 编程语言排行榜评为 2010 年度语言。
2.2 Python 的版本更新
目前 python 发布的版本过程主要包括如下:
目前 python 的最新版本已经达到 3.10.4,因此可见版本更新之快。
2.1 Python2.0 与 Python3.0 的区别
输出方面
Python2.0 使用 print 关键字进行输出,比如:print “Hello”;
Python3.0 使用 print()函数,比如:print("Hello")。
输入方面
Python2.0 使用 raw_input()函数,比如:name=raw_input("请输入你的名字:");
Python3.0 使用 input()函数,比如:name=input("请输入你的名字:")。
字符串的编码格式
Python2.0 默认采用 ASCII 编码对输入的字符串进行编码;
Python3.0 默认采用 Unicode 编码对字符串进行编码。
格式化字符串的方式
Python2.0 用 %占位符进行标准化格式输出字符串,比如:“Hello,%s" % ("World");
Python3.0 用 format()函数,比如:”Hello,{}“.format("World")。
源文件的编码格式
Python2.0 默认采用 ASCII,因此使用中文时要在源文件开头加上一行注释:# -- coding: utf-8 --;
Python3.0 默认采用 utf-8。
数据类型
python2.0 有整型 int、长整型 long
python3.0 只有整型 int
代码规范
python 2.0 源码不规范,重复代码很多
python 3.0 源码精简,美观、优雅
3 Python 编译和运行过程
虽然 Python 源代码文件(.py)可以直接使用 Python 命令运行,但实际上 Python 并不是直接解释 Python 源代码,它是具有一个编译和运行的过程,具体过程如下图:
首先将 Python 源代码(.py 文件)编译生成 Python 字节码(Python Byte Code,字节码文件的扩展名一般是.pyc),然后再由 Python 虚拟机(Python Virtual Machine,简称 PVM)来执行 Python 字节码,最后在终端输出运行结果。
通过以上编译和运行过程可分析:Python 是一种解释型语言,指的是解释 Python 字节码,而不是 Python 源代码。这种机制的基本思想与 Java 和.NET 是一致的。
3.1 Python 解释器
Python 解释器(Interpreter)是把 Python 语言翻译成计算机 CPU 能听懂的机器指令。
首先可以在命令提示行输入 python --version 来查看 python 的版本:
然后在命令提示符中输入"Python"命令来启动 Python 解释器:
执行以上命令后,出现如下信息:
Python 解释器易于扩展,可以通过调用 C 语言或 C++来扩展新功能和数据类型。
3.2 Python 解释器种类
Cpython:用 C 语言开发的,在命令行下运行 Python 就是启动 Cpython 解释器,官方下载的 python2.7 均为 Cpython。Cpython 用>>>作为提示符。
Ipython:基于 CPython 之上的一个交互式解释器,也就是说,IPython 只是在交互方式上有所增强,但是执行 Python 代码的功能和 CPython 是完全一样的。IPython 用 In [序号]:作为提示符。
PyPy:主要针对执行速度。采用 JIT 技术,对 Python 代码进行动态编译。绝大部分 Python 代码都可以在 PyPy 下运行。
Jpython:运行在 Java 平台上的 Python 解释器,可以直接把 Python 代码编译成 Java 字节码执行。
IronPython:运行在微软.Net 平台上的 Python 解释器,可以直接把 Python 代码编译成.Net 的字节码。
Boost.Python:使得 Python 和 C++的类库可互相调用(.pyc)。
3.3 Python 虚拟机
python 并不将 py 文件编译为机器码来运行,而是由 python 虚拟机一条条地将 py 语句解释运行,python 虚拟机的执行方式就是模仿普通 x86 可执行文件运行方式。
虚拟机输入为字节码.pyc 文件,由字节码文件加载器将二进制的.pyc 文件加载到内存,由执行引擎解释执行,输出为字节码文件的执行结果。
3.4 Python 字节码(.pyc)
Python 中的字节码(bytecode) 是一种数据类型, Python 代码的编译结果就是 bytecode 对象。bytecode 对象可以由虚拟机加载后直接运行,而 pyc 文件就是 bytecode 在硬盘上的保存形式。
假如有个 test.py 文件需要执行,那么它会先生成.pyc 文件,一般可能的情况如下:
执行 python test.py 会对 test.py 进行编译成字节码并解释执行,但不会生成 test.pyc。
如果 test.py 中加载了其他模块,如 import urllib2,那么 python 会对 urllib2.py 进行编译成字节码,生成 urllib2.pyc,然后对字节码解释执行。
如果想生成 test.pyc,可以使用 python 内置模块 py_compile 来编译,也可以执行命令
python -m py_compile test.py
这样,就生成了 test.pyc。加载模块时,如果同时存在.py 和.pyc,python 会使用.pyc 运行,如果.pyc 的编译时间早于.py 的时间,则重新编译 .py 文件,并更新.pyc 文件。
如下为生成的.pyc 文件示例:
4 Python 的应用
Python 的应用主要有以下领域:
Linux/UNIX 运维:提供 API(Application Programming Interface 应用程序编程接口),能方便进行系统维护和管理。
GUI 程序开发(PyQt、Kivy 等)
Web 程序开发(Django、Flask 等框架):支持最新的 XML 技术。
移动 App 开发(PyQt、Kivy 等):Python 的 PyOpenGL 模块封装了“OpenGL 应用程序编程接口”,能进行二维和三维图像处理。PyGame 模块可用于编写游戏软件。
网络爬虫(为搜索引擎、深度学习等领域提供数据源)
网络编程(基于 Socket 等协议):提供丰富的模块支持 sockets 编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如 Zope,Mnet 及 BitTorrent. Google 都在广泛地使用它。
图形处理:有 PIL、Tkinter 等图形库支持,能方便进行图形处理。
文本处理:python 提供的 re 模块能支持正则表达式,还提供 SGML,XML 分析模块,许多程序员利用 python 进行 XML 程序的开发。
数据库编程:可通过遵循 Python DB-API(数据库应用程序编程接口)规范的模块与 Microsoft SQL Server,Oracle,Sybase,DB2,Mysql、SQLite 等数据库通信。python 自带有一个 Gadfly 模块,提供了一个完整的 SQL 环境。
数据科学:NumPy 扩展提供大量与许多标准数学库的接口。机器学习(scikit-learn、TensorFlow 框架)、数据统计分析和可视化(Matplotlib、seaborn 框架)。
python 应用举例:
Google - 谷歌在很多项目中用 python 作为网络应用的后端,如 Google Groups、Gmail、Google Maps 等
NASA - 美国宇航局,从 1994 年起把 python 作为主要开发语言
豆瓣网 - 图书、唱片、电影等文化产品的资料数据库网站
Torchlight --Python 编写的大型 3D 游戏,原 Blizzard 公司人员制作发行,开源
Blender - 以 C 与 Python 开发的开源 3D 绘图软件 在科学研究中也得到广泛的应用
5 Python 的特点
简单易读易学:Python 是非常简单的语言,并且具有清晰的风格和强制缩进,Python 具有简单的语法,极其容易入门。
免费其开源:Python 是自由/开放源码的软件。可以自行对其源代码进行修改使用。
可移植性:Python 可以被移植在许多平台上,常用的平台包括 Linux、Windows、VxWorks、PlayStation、Windows CE、PocketPC 等。
解释性: Python 解释器把源代码转换成字节码,然后再把它翻译成计算机使用的机器语言并运行,即 Python 代码在运行之前不需要编译。
面向对象:Python 支持面向对象的编程。程序通过组合(composition)与继承(inheritance)的方式定义类(class)。
可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,那么可以将部分程序用 C 或 C++进行编写,然后在 Python 程序中调用。
可嵌入性:可以把 Python 嵌入 C/C++程序,从而向程序用户提供脚本功能。
交互式命令行:python 可以单步直译运行,可以在一个 Python 提示符 >>> 后直接执行代码。
丰富的标准库:Python 标准库包括字符串处理(字典、数组切片、正则表达式 re)、文档生成、多线程、串行化、数据库、HTML/XML 解析(BeautifulSoup,Expat)、单元测试(PyUnit)、代码版本控制(PySVN)、WAV 文件、网络控制(urllib2)、密码系统、GUI(图形用户界面,PyQt)、图形模块(Tkinter、PyTCL、WxPython)等。除了标准库以外,还有许多其他高质量的库,如 wxPython、Twisted 和 Python 图像库等等。
规范性:采用强制缩进的方式使得代码具有较好可读性,减少了视觉上的错乱。
胶水语言:python 经常用作将不同语言编写的程序“粘”在一起的胶水语言。Boost.Python 使得 Python 和 C++的类库可互相调用(.pyc);Jpython 是用 Java 实现的 Python,可以同时使用两者的类库;Ironpython 是 Python 在.NET 平台上的版本。
6 Python 优点
易于学习,非常适合初学者,也特别适合专家使用
可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本)
可移植,跨平台
可嵌入(使 ArcGIS 可脚本化)
稳定成熟
用户社区规模大
版权声明: 本文为 InfoQ 作者【左手の明天】的原创文章。
原文链接:【http://xie.infoq.cn/article/3530e9215eca6e8066a8901d3】。文章转载请联系作者。
评论