pythonの旅
人生苦短,我用python
# 前世今生
Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991年。
作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进(white space)划分代码块,而非使用大括号或者关键词)。相比于 C++ 或 Java,Python 让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python作为程序的名字,是因为他是BBC电视剧——蒙提·派森的飞行马戏团的爱好者。ABC是由吉多参加设计的一种教学语言。就吉多本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在Python中避免这一错误,并获取了非常好的效果,完美结合了C和其他一些语言,并且结合了Unix shell和C的习惯。
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号{}
或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。
# 应用领域
作为一门语言,自然有他应用的领域,接下来我们就来讨论一下python可以用于哪些高大上的领域。
@ Web 程序
Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。使用Python语言编写的Gunicorn作为Web服务器,也能够运行Python语言编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的沟通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可以让程序员轻松地开发和管理复杂的Web程序。
Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步在线编写程序和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。另有gevent这个流行的第三方库,同样能够支持高性能高并发的网络开发。
@ GUI 开发
Python本身包含的Tkinter库能够支持简单的GUI(图形界面)开发。但是越来越多的Python程序员选择wxPython或者PyQt等GUI包来开发跨平台的桌面软件。使用它们开发的桌面软件运行速度快,与用户的桌面环境相契合。通过PyInstaller还能将程序发布为独立的安装程序包。
在国内,我们可爱的攻城狮在这方面做的比较的少,一般都是使用pyQt,说明在这GUI方面的开发,我国还是一块大蛋糕。
@ 操作系统
在很多操作系统里,Python是标准的系统组件。大多数Linux发行版和Mac OS X都集成了Python,可以在终端机下直接运行Python。有一些Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器、Red Hat Linux和Fedora的Anaconda安装器。在RPM系列Linux发行版中,有一些系统组件就是用Python编写的。Gentoo Linux使用Python来编写它的Portage软件包管理系统。Python标准库包含了多个调用作业系统功能的库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它Windows API。使用IronPython,Python程序能够直接调用.Net Framework。
@ 科学计算
Python可以广泛的在科学计算领域发挥独特的角色。有许多模块可以帮助你在计算巨型数组、矢量分析、神经网络等方面高效率完成工作。尤其是在教育科研方面,可以发挥出独特的优势。
不过你做这方面的一定是对数学有很高的造诣,要是对数学不感冒的话,不深入研究数学,你要是进入这个应用领域还是早点退出吧。你还年轻!(这里重点强调三次【数学Math】)
python的应用方面还有很多,这里只列举一些比较常用的,热门的方向。
# 语法Grammar
这里简单介绍一下python的几个语法,其实大部分机器语言的语法还是一样的,都是大同小异。
@ 数据类型
作为一个机器语言,毕竟是要给机器看的,都得告诉她你给她的是什么,要她怎么做。但python不同于其他OOP(面向对象编程)语言一样,需要写出数据的类型,例如 C++ 中需要定义int
类型或者是bool
类型。python只需要你给她,不需要和她解释东西,就像人会分析会思考一样,python把这以过程智能化了,不需要你操心这些变量的类型。
类型 | 描述 | 例子 |
---|---|---|
str |
一个由字符组成的不可更改的有序列。在Python 3.x里,字符串由Unicode字符组成。 | 'Wikipedia' "Wikipedia" """Spanningmultiplelines""" |
bytes |
一个由字节组成的不可更改的有序列。 | b'Some ASCII' b"Some ASCII" |
list |
可以包含多种类型的可改变的有序列 | [4.0, 'string', True] |
tuple |
可以包含多种类型的不可改变的有序列 | (4.0, 'string', True) |
set , frozenset |
与数学中集合的概念类似。无序的、每个元素唯一。 | {4.0, 'string', True} frozenset([4.0, 'string', True]) |
dict或map |
一个可改变的由键值对组成的无序列。 | {'key1': 1.0, 3: False} |
int |
精度不限的整数 | 42 |
float |
浮点数。精度与系统相关。 | 3.1415927 |
complex |
复数 | 3+2.7j |
bool |
逻辑值。只有两个值:真、假 | True False |
栗子:
@ 语句和控制流
if
语句,当条件成立时运行语句块。经常与else
,elif
(相当于else if
)配合使用。for
语句,遍列列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。while
语句,当条件为真时,循环运行语句块。try
语句。与except, finally, else
配合使用处理在程序运行中出现的异常情况。class
语句。用于定义类型。def
语句。用于定义函数和类型的方法。pass
语句。表示此行为空,不运行任何操作。assert
语句。用于程序调适阶段时测试运行条件是否满足。with
语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行结束后释放锁。yield
语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。raise
语句。抛出一个异常。import
语句。导入一个模块或包。常用写法:from module import name, import module as name, from module import name as anothername
#丰富的库文件
python之所以强大,不仅在于它拥有标准库,还拥有许多第三方库,利用这些库文件可以创造任何你想创造的。
以下分领域列举一些著名第三方库
@ Web框架
- jango
开源Web开发框架,它鼓励快速开发,并遵循MVC设计,开发周期短。 - Flask
轻量级的Web框架。 - Pyramid
轻量,同时有可以规模化的Web框架,Pylon projects 的一部分。 - ActiveGrid
企业级的Web2.0解决方案。 - Karrigell
简单的Web框架,自身包含了Web服务,py脚本引擎和纯python的数据库PyDBLite。 - Tornado
一个轻量级的Web框架,内置非阻塞式服务器,而且速度相当快 - webpy
一个小巧灵活的Web框架,虽然简单但是功能强大。 - CherryPy
基于Python的Web应用程序开发框架。 - Pylons
基于Python的一个极其高效和可靠的Web开发框架。 - Zope
开源的Web应用服务器。 - TurboGears
基于Python的MVC风格的Web应用程序框架。 - Twisted
流行的网络编程库,大型Web框架。 - Quixote
Web开发框架。
@ 科学计算
- Matplotlib
用Python实现的类matlab的第三方库,用以绘制一些高质量的数学二维图形。 - Pandas
用于数据分析、数据建模、数据可视化的第三方库。 - SciPy
基于Python的matlab实现,旨在实现matlab的所有功能。 - NumPy
基于Python的科学计算第三方库,提供了矩阵,线性代数,傅立叶变换等等的解决方案。
@ GUI
- PyGtk
基于Python的GUI程序开发GTK+库。 - PyQt
用于Python的QT开发库。 - WxPython
Python下的GUI编程框架,与MFC的架构相似。
@ 其它
- BeautifulSoup
基于Python的HTML/XML解析器,简单易用。 - gevent
python的一个高性能并发框架,使用了epoll事件监听、协程等机制将异步调用封装为同步调用。 - PIL
基于Python的图像处理库,功能强大,对图形文件的格式支持广泛。目前已无维护,另一个第三方库Pillow实现了对PIL库的支持和维护。 - PyGame
基于Python的多媒体开发和游戏软件开发模块。 - Py2exe
将python脚本转换为windows上可以独立运行的可执行程序。 - Requests
适合于人类使用的HTTP库,封装了许多繁琐的HTTP功能,极大地简化了HTTP请求所需要的代码量。 - scikit-learn
机器学习第三方库,实现许多知名的机器学习算法。 - TensorFlow
Google开发维护的开源机器学习库。 - Keras
基于TensorFlow,Theano与CNTK的高级神经网络API。 - SQLAlchemy
关系型数据库的对象关系映射(ORM)工具
我对死亡感到唯一的痛苦是没能为爱而死
本文链接:http://congtsang.com/2018/01/27/python-1/