Python - 类库丰富 面向对象解释型脚本 AI 编程语言
Python ([ˈpaɪθən]) 是一种面向对象、解释型计算机程序设计语言。Python 语法简洁、清晰,具有丰富且强大的类库。因此,Python 也是当下 "AI 人工智能" 最流行的开发语言。
Python 源代码遵循 GPL (GNU General Public License) 协议,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。
Python 常被称为胶水语言,能把用其他语言编写的各模块 (尤其是 C/C++) 轻松地联结在一起。常见情形是,用 Python 快速生成程序原型 (有时甚至是程序最终界面),然后对其中有特别要求的部分,用更合适的语言改写;譬如:3D 游戏中的图形渲染模块,性能要求特别高,就可用 C/C++ 重写,而后封装为 Python 可调用的扩展类库。需要注意的是,在使用扩展类库时可能需要考虑平台问题,某些扩展类库可能不提供跨平台实现。
快速高效 智能编辑 重构 批处理 "数字化 Python IDE" 集成开发环境 http://idepy.digitser.cn/
从20世纪90年代初诞生至今,Python逐渐被广泛应用于处理系统管理任务和Web编程。
设计者开发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社区提供了大量第三方模块,使用方式与标准库类似。它们的功能无所不包,覆盖科学计算、Web开发、数据库接口、图形系统多个领域,并且大多成熟而稳定。第三方模块可以使用Python或C语言编写。
SWIG,SIP常用于将C语言编写的程序库,转化为Python模块。Boost C++ Libraries包含了一组库,Boost.Python使得以Python或C++编写的程序能互相调用。借助于拥有基于标准库的大量工具、能够使用低级语言如C和可作为其他库接口的C++,Python已成为一种强大的应用于其他语言与工具之间的胶水语言。
1989年圣诞节期间,在阿姆斯特丹,Guido van Rossum为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序名,是因他是一个叫Monty Python的喜剧团体的爱好者。
ABC是Guido van Rossum参加设计的一种教学语言。就Guido van Rossum本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但ABC语言并没有成功,究其原因,Guido van Rossum认为是不开放造成的。Guido van Rossum决定在Python中避免这一问题。同时,他还想实现在ABC中闪现过,但未曾实现的东西。
就这样,Python在Guido van Rossum手中诞生了。可以说,Python是从ABC发展起来的,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响,并且结合了Unix shell和C的习惯。
Python已成为最受欢迎的程序设计语言之一。2011年1月,Python被TIOBE编程语言排行榜评为2010年度语言。2004年后,python语文的使用率是呈线性增长的。
由于Python语言的简洁、易读及可扩展性,国外用Python做科学计算的研究机构正日益增多,一些知名大学已采用Python教授程序设计课程。譬如:卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。
众多开源科学计算软件包都提供了Python调用接口,譬如:著名计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,譬如:以下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算及绘图功能。因此,Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
说起科学计算,首先会被提到的可能是MATLAB。然而,除MATLAB一些专业性很强的工具箱还无法替代之外,MATLAB的大部分常用功能都可在Python社区中找到相应扩展库。
和MATLAB相比,用Python做科学计算有如下优点:
01、MATLAB是一款商用软件,且价格不菲 Python完全免费,众多开源的科学计算库都提供了Python调用接口。用户可在任何计算机上免费安装Python及其绝大多数扩展库。
02、与MATLAB相比,Python是一门更易学、更严谨的程序设计语言 Python可让用户编写出更易读、易维护的代码。
03、MATLAB主要专注于工程和科学计算 即使在计算领域,也常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可轻松完成各种高级任务,开发者可用Python实现完整应用程序所需的各种功能。
解释器
Python 是一门跨平台的脚本语言,Python 只规定了一种语法规则。若采用不同编程语言实现 Python 语法并解释程序,就成了一种不同的 Python 解释器。
不管采用哪种编程语言实现 Python 解释器,在编写 Python 应用时的代码规范及语法规则是不变的,变化的只是底层解释器实现,即 "运行时" 的方式。
Python 解释器实现 实现 | 底层语言 | 备注 | CPython | C | Classic Python,也是原始 Python实现,当需区别于其他实现时,才以 CPython 称呼;或称作 C语言实现的 Python。这是最常用的 Python 版本。 | Jython | Java | Java 语言实现的 Python。Jython 可直接调用 Java 函数库。 | PyPy | Python | 用 Python 语言写的 Python 实现。 | IronPython | .NET | 面向 .NET 和 ECMA CLI 的 Python 实现。IronPython 能直接调用 .NET 平台函数库,可将 Python 应用编译成 .NET 程序。 | ZhPy |
| 又名周蟒,支持使用 "繁/简中文" 语句编写应用的 Python 实现。 |
设计哲学
01、Python的设计哲学是“优雅”、“明确”、“简单”。 因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。
在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。
由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能支撑大规模的软件开发。这些准则被称为Python格言。
在Python解释器内,运行import this可获得完整设计哲学列表。
- import this
- The Zen of Python, by Tim Peters
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
- Complex is better than complicated.
- Flat is better than nested.
- Sparse is better than dense.
- Readability counts.
- Special cases aren't special enough to break the rules.
- Although practicality beats purity.
- Errors should never pass silently.
- Unless explicitly silenced.
- In the face of ambiguity, refuse the temptation to guess.
- There should be one-- and preferably only one --obvious way to do it.
- Although that way may not be obvious at first unless you're Dutch.
- Now is better than never.
- Although never is often better than *right* now.
- If the implementation is hard to explain, it's a bad idea.
- If the implementation is easy to explain, it may be a good idea.
- Namespaces are one honking great idea -- let's do more of those!
复制代码
02、Python开发人员会尽量避开不成熟或不重要的优化 一些针对非重要部位的加快运行速度的补丁,通常不会被合并到Python内。因此,很多人认为Python很慢。
不过,根据二八定律,大多数程序对速度要求并不高。在某些对运行速度要求很高的情况,Python设计师可倾向于使用JIT技术,或使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
03、Python是完全面向对象的编程语言 函数、模块、数字、字符串都是对象。并完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统函数式编程语言,Python对函数式设计只提供了有限的支持。Python 有两个标准库(functools, itertools),提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
04、Python可能被粗略地分类为“脚本语言”(script language) 但实际上,一些大规模软件开发计划,譬如:Zope、Mnet及BitTorrent,Google也在广泛使用它。
Python支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
05、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的设计目标之一是让代码具备高度的可阅读性。设计时,尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言,如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。
01、缩进 Python开发者有意让违反了缩进规则的程序不能通过编译,以此强制程序员养成良好的编程习惯。
并且,Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。
譬如,python 3.0 的 for 语句: - for html_row in html:
- count = count + 1
- print(count, html_row.replace(b"\xc2\xa9", b" ").decode("UTF-8")) #将 b"\xc2\xa9" 版权字符替换成空格,以免无法解码
-
- print(req.headers.get('User-agent'))
复制代码
根据PEP规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中可以自定义空格数,但是要满足每级缩进间空格数相等)。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。
02、控制语句 # | 语句 | 作用 | 备注 | 01 | if
| 当条件成立时运行语句块。 | 常与else, elif(相当于else if) 配合使用。 | 02 | for | 遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每一元素。 | | 03 | while | 当条件为真时,循环运行语句块。 | | 04 | try | 与except,finally配合使用,处理程序运行时出现的异常情况。 | | 05 | class | 用于定义类。 | | 06 | def | 用于定义函数和类方法。 | | 07 | pass | 表示此行为空,不运行任何操作。 | | 08 | assert | 用于程序调适阶段时,测试运行条件是否满足。 | | 09 | with | Python2.6以后定义的语法,在一个场景中运行语句块。 | 运行语句块前加密,然后在语句块运行退出后解密。 | 10
| yield | 在迭代器函数内使用,用于返回一个元素。 | 自Python 2.5版本后,这个语句变成了一个运算符。 | 11 | raise | 引发一个错误。 |
| 12 | import | 导入一个模块或包。 | | 13
| from import | 从包导入模块,或从模块导入某个对象。 | | 14 | import as | 将导入对象,赋值给一个变量。 | | 15 | in | 判断一个对象,是否在一个字符串/列表/元组中。 | |
著名应用
# | 软件 | 功能 | 备注 | 01
| Pylons
| Web 应用框架 | Pylons是最新的Web应用框架中的典型,类似于Django和TurboGears。Pylons受Ruby on Rails影响很深:它的两个组件,Routes和WebHelpers是Rails特性的Python实现。 | 02
| Zope | 应用服务器 | | 03
| Plone | cms 内容管理系统 | | 04 | Django | 鼓励快速开发的Web应用框架 | | 05
| Uliweb | 国人开发的轻量级Web框架 | Uliweb在开发中还借鉴了象web2py的Template模板模块,Django的一些设计思想和成果。 | 06
| TurboGears | Web应用快速开发框架 | | 07
| Twisted | Python网络应用程序框架 | | 08
| Python Wikipedia Robot Framework | MediaWiki的机器人程序 | | 09
| MoinMoinWiki | Python写成的Wiki程序 | | 10
| flask | Python微Web框架 | | 11
| tornado | 非阻塞式服务器 | | 12
| Webpy | Python微Web框架 | | 13
| Bottle | Python微Web框架 | | 14
| EVE | 网络游戏EVE大量使用Python进行开发 | | 15
| Reddit | 社交分享网站 | | 16
| Dropbox | 文件分享服务 | | 17
| Fabric | 用于管理成百上千台Linux主机的程序库 | | 18
| Trac | 用Python编写的BUG管理系统 | | 19
| Mailman | 用Python编写的邮件列表软件 | | 20
| Mezzanine | 基于Django编写的内容管理系统 | | 21
| Blender | 以C与Python开发的开源3D绘图软件 | | 22
| Quora | Quora是一个问答SNS网站 | 由 Facebook 前雇员查理·切沃(Charlie Cheever)和亚当·安捷罗(Adam D' Angelo)于2009年6月创办,实时更新部分 web service 采用开源 Tornado (web framework)。
|
GUI
# | GUI | 功能 | 备注 | 01
| Tkinter | Python默认图形界面接口。 | Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。 | 02
| PyGTK | 用于python GUI程序开发的GTK+库。 | GTK就是用来实现GIMP和Gnome的库。 | 03
| PyQt | 用于python的Qt开发库,使用GPL协议。 | QT是实现KDE环境的库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是Scintillar编辑器类的Qt接口。 | 04
| Pyside
| 跨平台应用程式框架Qt的Python绑定版本,使用LGPL协议。 | 提供和PyQt类似的功能,并相容 API。 | 05
| wxPython | GUI编程框架。 | 熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或对设计要求不高的用户来说,使用Boa Constructor可以方便迅速的进行wxPython的开发)。 | 06
| Pmw | Python megawidgets,Python超级GUI组件集,一个在python中利用Tkinter模块构建的高级GUI组件。 | 每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。 |
其它工具库
# | 库 | 功能 | 备注 | 01
| PIL (Python Imaging Library)
| 提供强大的图形处理能力。是Python用户进行图象处理的强有力工具。 | 提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印、合并、显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。 | 02
| Psyco | Python代码加速度器。 | 可使Python代码的执行速度,提高到与编译语言一样的水平。 | 03
| PyMedia | 用于多媒体操作的python模块。 | 提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。 | 04
| PyGame | 用于多媒体开发和游戏软件开发的模块。 |
| 05
| PyOpenGL | 模块封装了“OpenGL应用程序编程接口”。 | 通过该模块python程序员可在程序中集成2D和3D的图形。 | 06
| smtplib | 发送电子邮件。 |
| 07
| ftplib | 定义了FTP类和一些方法,用以进行客户端的ftp编程。 | 如想了解ftp协议的详细内容,请参考RFC959。 | 08
| PyOpenCL | OpenCL的Python接口。 | 通过该模块可以使用GPU实现并行计算。 |
优点
01、简单 Python是一种代表简单主义思想的语言。
阅读一个良好的Python程序就感觉像是在读英语一样。它使你能专注于解决问题而不是去搞明白语言本身。
02、易学 Python极其容易上手,因为Python有极其简单的说明文档。
03、速度快 Python底层是用C语言写的,很多标准库和第三方库也都是用C写的,运行速度非常快。
04、免费、开源 Python是FLOSS(自由/开放源码软件)之一。FLOSS是基于一个团体分享知识的概念。
使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
05、高层语言 用Python语言编写程序的时候,无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
06、可移植性 由于Python的开源本质,Python已被移植在许多平台上(经过改动使它能够工作在不同平台上)。
这些平台,包括:Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
07、解释性 一个用编译性语言,譬如:C或C++写的程序可从源文件(即C或C++语言)转换到计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。
运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可直接从源代码运行程序。
在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。
08、面向对象 Python既支持面向过程的编程,也支持面向对象的编程。
在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。
在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
09、可扩展性 如需要一段关键代码运行得更快或希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。
10、可嵌入性 可把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
11、丰富的库 Python标准库确实很庞大。
可帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
12、代码规范 Python采用强制缩进的方式,使得代码具有较好可读性。且Python语言写的程序,不需要编译成二进制代码。
缺点
01、单行语句和命令行输出问题
很多时候不能将程序连写成一行,譬如;import sys;for i in sys.path:print i。
而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。
02、独特的语法 这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。
最常见的情况是tab和空格的混用会导致错误,而这是用肉眼无法分别的。
03、运行速度慢 这里是指与C和C++相比。
扫一扫关注 "德云社区"
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
|