-----------------------------------------------------------------------
简 明 Python 教 程
第1章 介绍
第2章 安装Python
第3章 最初的步骤
第4章 基本概念
-----------------------------------------------------------------------
08-5-28
第5章 运算符与表达式
-----------------------------------------------------------------------
第6章 控制流
三种控制流语句:if while for以及break continue
break语句:
一个重要的注释是:如果从for或while循环中 终止 ,任何对应的循环else块将不执行。
-----------------------------------------------------------------------
第7章 函数
默认参数值:
只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的
形参而后声明没有默认值的形参。
这是因为赋给形参的值是根据位置而赋值的。例如,def func(a, b=5)是有效的,但是def func(a=5,
b)是 无效 的
None是Python中表示没有任何东西的特殊类型
pass语句在Python中表示一个空的语句块
DocStrings文档字符串:首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。
def printMax(x, y):
...
...
print printMax.__doc__
-----------------------------------------------------------------------
第8章 模块
当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。如果找到了这
个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你使用 。注意,初始化过程仅在我
们 第一次 输入模块的时候进行。
from import语句:
from sys import argv
from sys import *
避免使用from..import而使用import语句-->程序易读,避免名称的冲突。
模块的__name__
if __name__ == '__main__':
每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,我们可以
进行相应的恰当操作。
可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。
模块的用处在于它能为你在别的程序中重用它提供的服务和功能。Python附带的标准库就是这样一组模
块的例子
-----------------------------------------------------------------------
第9章 数据结构
Python中有三种内建的数据结构——列表、元组和字典
sort方法影响列表本身,而不是返回一个修改后的列表:列表是 可变的 而字符串是 不可变的
list是处理一组有序项目的数据结构,一旦创建了一个列表,可以添加、删除或是搜索列表中的项目
元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组
注意元组之内的元组不会失去它的身份
索引 运算符:new_zoo[2]
含有单个元素的元组:必须在第一个(唯一一个)项目后跟一个逗号 以区分元组和表达式中一个带圆括号
的对象。
print语句可以使用跟着%符号的项目元组的字符串
定制可以是%s表示字符串或%d表示整数
列表:
shoplist = ['apple', 'mango', 'carrot', 'banana']
元组:
zoo = ('wolf', 'elephant', 'penguin')
字典:
键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。
字典是dict类的实例/对象
列表、元组和字符串都是序列
序列的两个主要特点是索引操作符和切片操作符
08-5-29:
引用:
变量名指向对象的内存地址
名称到对象的绑定
mylist = shoplist[:] # make a copy by doing a full slicce
-----------------------------------------------------------------------
第10章 解决问题——编写一个Python脚本
要求:文件创建备份的程序
1. 什么(分析)
2. 如何(设计)
3. 编写(实施)
4. 测试(测试与调试)
5. 使用(实施或开发)
6. 维护(优化)
7. 重要
-----------------------------------------------------------------------
第11章 面向对象的编程
self:
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这
个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的
名称是self
__init__方法(开始和结尾都是双下划线):
__init__方法在类的一个对象被建立时,马上运行
__init__方法类似于C++、C#和Java中的 constructor
类的变量:只有一个类变量的拷贝
对象的变量:有自己的拷贝
只能使用self变量来参考同一个对象的变量和方法。这被称为 属性参考
可以发现,self.name的值根据每个对象指定,这表明了它作为对象的变量的本质
__del__方法:
它在对象消逝的时候被调用
对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用
__del__方法与 destructor 的概念类似
Python中所有的类成员(包括数据成员)都是公共的
Python的名称管理体系:会将 双下划线前缀的数据成员作为私有变量,如:__privatevar
11.7 继承:(inherit.py)
Python中继承在子类中必须调用父类的__init__ ?
Python不会自动调用基本类的constructor
-----------------------------------------------------------------------
第12章 输入/输出
f = file('poem.txt', 'w')
模式可以为:读(r)、写(w)、追加(a)
读模式会作为默认的模式
f.readline():
因为从文件读到的内容已经以换行符结尾,所以在print语句后使用逗号来消除自动换行
12.2 储存器:
Python提供一个标准的模块,称为pickle
另一个:cPickle(用C语言编写,比pickle快1000倍,功能和pickle模块完全相同)
两个模块都简称为pickle模块
持久化
**************************************************
f = file(shoplistfile, 'w')
p.dump(shoplist, f) # dump the object to a file
f.close()
f = file(shoplistfile)
storedlist = p.load(f)
**************************************************
-----------------------------------------------------------------------
第13章 异常
try..except
可以关联上一个else从句
可以使用raise语句 引发 异常
同时使用except从句和finally块,需要把一个嵌入另外一个
sys.exit():
Traceback (most recent call last):
File "", line 1, in
sys.exit()
SystemExit
-----------------------------------------------------------------------
第14章 Python标准库
cat是 concatenate 的缩写
在交互模式下,在sys.argv列表中总是至少有一个项目。它就是当前运行的程序名称,作为sys.argv[0]
sys.version 版本信息
sys.version_info元组则提供一个更简单的方法使程序具备Python版本要求功能
sys.stdin
sys.stdout
sys.stderr
sys模块包含系统对应的功能
os模块包含普遍的操作系统功能
os.sep 取代操作系统特定的路径分割符
os.name 指示正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径
os.getenv()和os.putenv()函数分别用来读取和设置环境变量
os.listdir()返回指定目录下的所有文件和目录名
os.remove()函数用来删除一个文件
os.linesep 字符串给出当前平台使用的行终止符。如,Windows使用'/r/n',Linux使用'/n'而Mac使
用'/r'。
os.path.split()函数返回一个路径的目录名和文件名
>>> os.path.split('/home/swaroop/byte/code/poem.txt')
('/home/swaroop/byte/code', 'poem.txt')
os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。
os.path.exists()函数用来检验给出的路径是否真地存在
-----------------------------------------------------------------------
第15章 更多Python的内容
表15.1 一些特殊的方法:
名称 说明
__init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self) 恰好在对象要被删除之前调用。
__str__(self) 在我们对对象使用print语句或是使用str()的时候调用。
__lt__(self,other) 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等
等)都有特殊的方法。
__getitem__(self,key) 使用x[key]索引操作符的时候调用。
__len__(self) 对序列对象使用内建的len()函数的时候调用。
缩进层次-->语句块(只包含一句语句,可以在条件语句或循环语句的同一行指明它)
列表综合:可从一个已有的列表导出一个新的列表:
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listtwo
在函数中接收元组和列表:
由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀
,多余的参数则会被认为是一个字典的键/值对。
****************************************************************************
>>> def powersum(power, *args):
... '''Return the sum of each argument raised to specified power.'''
... total = 0
... for i in args:
... total += pow(i, power)
... return total
...
>>> powersum(2, 3, 4)
25
>>> powersum(2, 10)
100
****************************************************************************
lambda形式
lambda语句被用来创建新的函数对象,并且在运行时返回它们
***************************
def make_repeater(n):
return lambda s: s*n
twice = make_repeater(2)
print twice('word')
print twice(5)
***************************
print语句不能用在lambda形式中,只能使用表达式
exec语句用来执行储存在字符串或文件中的Python语句:
exec 'print "Hello World"'
eval语句用来计算存储在字符串中的有效Python表达式:
eval('2*3')
assert语句(断言)
当assert语句失败的时候,会引发一个AssertionError
repr函数用来取得对象的规范字符串表示,反引号(也称转换符)可以完成相同的功能.
大多数时候有eval(repr(object)) == object
**********************
>>> i = []
>>> i.append('item')
>>> `i`
"['item']"
>>> repr(i)
"['item']"
**********************
-----------------------------------------------------------------------
第16章 接下来学习什么?
可供选择的使用Python的GUI:
有许多可供选择的使用Python的GUI:
● PyQt: Qt工具包的Python绑定。Qt工具包是构建KDE的基石。
Linux下免费,Windows下付费
《使用Python语言的GUI编程:Qt版》:http://www.opendocs.org/pyqt/
官网:http://www.riverbankcomputing.co.uk/pyqt/index.php
● PyGTK: GTK+工具包的Python绑定。GTK+工具包是构建GNOME的基石
GTK+在Linux上工作得很好,而它的Windows接口还不完整。
官网:http://www.pygtk.org/
● wxPython: wxWidgets工具包的Python绑定。
它的可移植性极佳,可以在Linux、Windows、Mac甚至嵌入式平台上运行。
官网:http://www.wxpython.org/
wxGlade: http://wxglade.sourceforge.net/
● TkInter: 现存最老的GUI工具包之一。TkInter具备可移植性,可以在Linux/Unix和Windows下工作。
重要的是,TkInter是标准Python发行版的一部分。
● 更多:
Python.org上的GUI编程wiki页:http://www.python.org/cgi-bin/moinmoin/GuiProgramming
Python标准文档: http://docs.python.org/
Python.org: http://www.python.org/
comp.lang.python: 讨论Python语言的世界性新闻组
Google群: http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=comp.lang.python
作为新闻组镜像的邮件列表: http://mail.python.org/mailman/listinfo/python-list
《Python实用大全》: http://aspn.activestate.com/ASPN/Python/Cookbook/
《迷人的Python》: http://gnosis.cx/publish/tech_index_cp.html
《深入理解Python》: http://www.diveintopython.org/
Jython是用Java语言实现的Python解释器: http://www.jython.org/
IronPython是用C#语言实现的Python解释器: http://www.ironpython.com/
Lython是Python语言的Lisp前段: http://www.caddr.com/code/lython/
自由/开放源码软件(FLOSS)
Linux核心: http://www.kernel.org/
Knoppix: http://www.knopper.net/ (仅在CD上运行的Linux发行版)
OpenOffice.org: http://www.openoffice.org/
Mozilla Firefox: http://www.mozilla.org/products/firefox
Mozilla Thunderbird: http://www.mozilla.org/products/thunderbird
MPlayer 视频播放器: http://www.mplayerhq.hu/
Movix 是一个Linux发行版: http://movix.sourceforge.net/
更多FLOSS信息:
SourceForge: http://www.sourceforge.net/
FreshMeat: http://www.freshmeat.net/
KDE: http://www.kde.org/
GNOME: http://www.gnome.org/
OSNews: http://www.osnews.com/
LinuxToday: http://www.linuxtoday.com/
NewsForge: http://www.newsforge.com/
SwaroopCH's blog: http://www.swaroopch.info/blog
作者
Swaroop C. H. 在Yahoo!驻印度班加罗尔的办事处工作
www.swaroopch.info
译者
沈洁元 上海交通大学无线通信研究所硕士研究生
08-5-30
-----------------------------------------------------------------------