pythonの旅

Author Avatar
CongTsang 1月 27, 2018
  • 在其它设备中阅读本文章

人生苦短,我用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

# 应用领域

  作为一门语言,自然有他应用的领域,接下来我们就来讨论一下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/