python入门导引
实习需要,读了python的程序,归来决定系统地学习一下这个被称为“学得最划算”的语言。
集各家之言,先对Python做一个简介:
- python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定,属于OpenSource的项目。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。Python 可以是简单的脚本,也可以是大型的复杂程序。事实上,Python 解释器的最大特点是鼓励探索和简化学习过程。
- 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)完全相反。
1 Python一瞥:
Python精要,python十分钟入门,Python 二三事,A Very Brief Introduction to Python And its Data-Types,五分钟入门神图
2 快速学习
IBM的入门教程:Discover Python 探索Python(doc):
探索 Python,第 1 部分: Python 的内置数值类型(简单类型)
探索 Python,第 2 部分: 探索 Python 类型的层次结构(容器类型:元组 tuple)
探索 Python,第 3 部分: 探索 Python 类型的层次结构(容器类型:字符串 string)
探索 Python,第 4 部分: 探索 Python 类型的层次结构(容器类型:列表 list)
探索 Python,第 5 部分: 用 Python 编程(if语句,while循环)
探索 Python,第 6 部分: 用 Python 编程(for循环)
探索 Python,第 7 部分: 探索 Python 类型层次结构(容器类型:字典 dictionary)
探索 Python,第 8 部分: 用 Python 的输入输出功能读取和写入数据
还有序媛我一直更新丰富的系列博文:
简明Python教程系列:
简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考
简明python教程 --C++程序员的视角(五):面向对象的编程
简明python教程 --C++程序员的视角(六):输入输出
简明python教程 --C++程序员的视角(九):进阶用法
Python速查系列:
Python绘图系列:
Python图像处理库(PIL)--Image,ImageDraw等基本模块介绍
3 进阶学习
Google's Python Class | Understanding Python 国内下载地址 翻译(谷歌Python课程导读,安装Python,Python简介,Python 字符串)
MIT公开课:计算机科学及编程导论(Python教学)
两个Python中文社区:啄木鸟Python开源社区 python中国
Python 语言研究:关注 Python 本身语言、语法的研究和探讨,收集整理相关的文档和心得(尤其是中文资料)
4 Python图书推荐
Python图书概览:Python 安装包中附带的官方文档永远是最有价值的资料之一;书不必贪多,精读三五本好书,胜过藏书万卷
python 入门书籍推荐, 三本可以一买的 Python 书
对于语言特性的学习来说,特别推荐前四本:
(8.6分/144)Python入门指南《Python Tutorial》(中英对照版,简体中文版) -- 最新,最权威,公开文档
如果你想在最短的时间内就了解python的最基础使用, 那么不妨花几个小时时间看看这份官方的python入门教材
-- 最权威的 Python 教程,由 Python 作者 Guido van Rossum 主笔,有少许学院味道。
(8.8分/492)简明python教程《A Byte of Python》(英文、中文译本、CHM打包文档下载)-- 简洁明了,浅显易懂,公开文档
由浅入深讲述了python的方方面面内容, 适合对python快速入门
-- 简洁明了的 Python 教程,即使没有编程基础也可阅读。
(8.7分/159)Python Cookbook —— 编程惯例
以实例学习为主,覆盖面较广但不会太深入,主要针对水平在初学者之上的读者(已经熟悉 Python 的基本语法)
ActiveState 的 Python Cookbook 专栏
《Python食谱》 -- 啄木鸟图书翻译项目,基于第一版,未完成
(8.3分/958)Dive Into Python(英文镜像,中文版,Python 研究)这是一本写给有经验的程序员的参考书,并不是推荐给新手的
--为有经验的程序员编写的颇受好评的 Python 教程
该书以问题和实例程序为线索,不仅讲授 Python 的语法,同时还引导读者学习 Pythonic 的编程风格。书中大量的延伸阅读链接也很有价值。
(8.4分/67)Python自然语言处理《Natural Language Processing with Python》
(7.6分/27)《Text Process in Python》的附录A :python精要 “对 python 的超精简的但绝不失深度的介绍” -- from 译者 HuangYi
(7.7分/139)python学习手册《Learning Python》(《学习Python(第二版影印版)》 ,《Python语言入门(第一版中文版)》 ) -- 最细致,最深入
最好的讲解 Python 语言特性的书籍,文字浅显,辅以大量示例,即使初学者也可当作教材学习。
与此同时兼顾了内容的深度和广度,即使是有经验的 Python 程序员也会有所收获。原书第二版主要基于 Python 2.3,作者在主页上更新了关于 2.4 以后新语言特性的章节。
(7.4分/651)可爱的Python —— CPyUG社区的邮件列表,由Python的行者根据自身经验组织而成
(7.7分/857)Python核心编程/Core Python Programming —— 全面学习
(7.5分/93)Python参考手册
5 Google的python编码规范 (中文 ,英文)
下面的文章给你描述了一个最小的应该遵守的规范合集。如果按照这些指导原则,你将能编写出更简洁和漂亮的代码。作为附加效应,你的程序会变得可读性更好,更容易的被你和任何其他人修改。
- http://www.python.org/dev/peps/pep-0008/
- http://www.fantascienza.net/leonardo/ar/python_best_practices.html
Python的八荣八耻
以动手实践为荣, 以只看不练为耻。
以打印日志为荣, 以单步跟踪为耻。
以空白分隔为荣, 以制表分隔为耻。
以单元测试为荣, 以手工测试为耻。以代码重用为荣, 以复制粘贴为耻。
以多态应用为荣, 以分支判断为耻。
以Pythonic为荣,以冗余拖沓为耻。
以总结思考为荣, 以不求甚解为耻。
6 Python的安装和函数库
推荐使用IDE python(x,y),发布的Python(x,y)将近400M,收集了众多的函数库以及文档、教程。这也是《用Python做科学计算》一书中推荐的(文)。
“发行版附带了科学计算方面的很多常用库,另外还有大量常用库比如用于桌面软件界面制作的 PyQt, 还有文档处理,exe文件生成py2exe等常用库。另外的还有大量的工具如IDE,制图制表工具,加强的shell之类。很多下文提到的软件在此发行版中都有附带。其他方面,Python(x, y)还附带了手工整理出的所有库的离线文档,每个小版本升级都提供单独的补丁。总的来说是很用心维护的一个发行版,十分建议安装这个版本。”“在真正着手开发之前,你应该在下载一份离线的文档。在这个页面下载一份 HTML 格式的(打不开的话试试这里),解压出来其中 index.html 就是文档主页面。页面左边的 Quick Search 是离线也可以使用的,有对函数功能有疑惑或者要查询模块的时候就能在这里查看。”(python(x,y)自带这个python文档 )Python(x,y) has five main features:
- collecting scientific-oriented Python libraries and development environment tools ;
- collecting almost all free related documentation ;
- providing a quick guide to get started in Python / Qt / Spyder ;
- providing an all-in-one setup program, so the user can install or uninstall all these packages and features by clicking on one button only.
Python(x,y) was created for :
- rapid prototyping, using the enhanced Python shell known as IPython ;
- small/big projects (application-like) development, using Spyder - a powerful and interactive cross-platform Integrated Development Environment (IDE) ;
- scientific purpose: scientific computing, numerical simulations, signal processing, image processing, physics (experiments and modeling), engineering, ...
安装后有ipython(interactive console,豪华加强版python shell)和spyder(这个powerful scientific IDE类似matlab,而IDLE是Python作者提供的简单Python开发环境)这两个常用工具。
python数值计算库:NumPy为Python提供了快速的多维数组处理的能力,而SciPy则在NumPy基础上添加了众多的科学计算所需的各种工具包,有了这两个库,Python就有几乎和Matlab一样的处理数据和计算的能力了。
- NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都进行数组化,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
- SciPy的核心计算部分都是一些久经考验的Fortran数值计算库,例如:
- 线性代数使用LAPACK库
- 快速傅立叶变换使用FFTPACK库
- 常微分方程求解使用ODEPACK库
- 非线性方程组求解以及最小值求解等使用MINPACK库
特点
Python的特点
- Python对函数式编程只提供了有限的支持(相对于Lisp这种传统的函数式编程语言)。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式编程工具。
- Python的支持者较喜欢称它为一种高阶动态编程语言(虽然Python可能被粗略地分类为「脚本语言」(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它),原因是「脚本语言」泛指仅作简单编程任务的语言,如shell script、JavaScript等只能处理简单任务的编程语言,並不能与Python相提并论。
- 很多人还把Python作为一种「胶水语言」(glue language)使用(Python本身被设计为可扩展的。并非所有的特性和功能都集成到语言核心。可以使用C语言、C++、Cython来编写扩展模块。Python解释器本身也可以被集成到其它需要脚本语言的程序内)。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目使用C++编写性能要求极高的部分,然后用Python调用相应的模块。
- 作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。这样有意的强制程序员养成良好的编程习惯。其中很重要的一项就是Python的缩进规则:C++等语言是以{}来管理块的,而Python是以缩进来管理的。这样做的确有他的优越性。相信许多程序员都有过漏去{}的经历。如果,使用的编译器或者解释器优秀的话,你的确可以非常容易的加上漏去的{}。但是,如果不是这样,我想你会在复杂的代码中开始漫游了。因为,可能你的编译器会告诉你一个错误的错误信息,这个错误的位置可能会离你真正错误的地方很远(大概有十万八千里吧)。相对于此,以缩进管理方式的Python来说,程序员几乎不用考虑这种问题。其次以缩进方式区分块的Python在进行复杂的嵌套中,Python代码就显得明了许多了。
- 对于Python的代码类型,基本可分为3种,分别是字节代码,二进制代码,优化代码。他们的后缀名分别是.py .pyc .pyo 这些代码都可以直接运行,无需做任何的编译或者连接。Python在执行时,Python解释器会将源代码(.py文件)成字节码byte code(.pyc文件)这种中间形式,然后再由Python Virtual Machine来执行这些byte code。和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远(抽象层次更高)。在运行时,Python会检测在main.py的当前目录中有没有MyPython.pyc文件,如果没有那么导入MyPython.py并且同时生成MyPython.pyc为下次更快的导入做好准备。这样,可以减少不少初始化的时间。而且,这一切无需用户介入,Python会自动完成。
虽然Python是一个非常成功的语言,但是也有必要明白它的局限性。
- 运行效率低下 目前为止,Python可以说是所有主流脚本语言中速度最慢的。(是这样么?待考.)这与其脚本引擎的设计思路有关。 如果你的应用对于速度有着较高的要求,就要考虑Python是否能满足需要。不过这一点可以通过使用C编写关键模块,然后由Python调用的方式加以部分解决。
很多人认为Python很慢(Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。)。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python程序员倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。目前可用的JIT技术是Pysco。Cython可以将Python代码转换成C代码。 - 多线程支持欠佳 Python支持多线程,但是其运行效率也不高。
- 独特的语法 这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。 即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,而这是用肉眼无法分别的。
- 无类型 作为一种动态语言,随时随地创建和使用变量是Python给我们带来的巨大的便利。但是它也会使得程序不严谨,某些错误只有在运行中才可能出现。所以,使用Python编程的时候,要对类型做到心里有数。这也使得Python的IDE工具无法提供便利的自动完成等功能。
可以参考百度百科和博文:
优点
简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
易学:Python极其容易上手,因为Python有极其简单的语法。
免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
高层语言:用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平台。
解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。
运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。
在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。
面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。
可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
规范的代码
:Python采用强制缩进的方式使得代码具有较好可读性。
局限
强制缩进:这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。
单行语句和命令行输出问题:很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。