Saturday, November 8, 2008

python 简明教程

http://www.chinesepython.org/pythonfoundry/tut2.3/tmp/tmp.html
变量和赋值
同一个值可以同时赋给几个变量:
>>> x = y = z = 0
复数也同样得到了支持,虚部由一个后缀"j"或者"J"来表示。带有非零实部的复数记为"real+imagj",也可以通过"complex(real, img)"函数创建
字符串用单引号或双引号标识。可以在行加反斜杠做为继续符。字符串可以用一对三重引号”””或'''来标识
字符串可以用 + 号联接(或者说粘合),也可以用 * 号循环。e.g. '<' + word*5 + '>'。两个字符串值之间的联接是自动的
字符串可以用下标(索引)查询;就像 C 一样,字符串的第一个字符下标是0(zero)
切片索引(Slice indices)可以使用默认值
链表写为中括之间用逗号分隔的一列值(子项)。链表的子项不一定是同一类型的值。
>>> a = ['spam', 'eggs', 100, 1234]
与不变的字符串不同,链表可以改变每个独立元素的值
Control Flow
if ... elif ... elif ... 序列用于替代其它语言中的 switch 或 case 语句。
for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代
range()生成一个等差级数链表
>>> range(5, 10) [5, 6, 7, 8, 9]
>>> range(0, 10, 3) [0, 3, 6, 9]
>>> range(-10, -100, -30) [-10, -40, -70]
break 语句和 C 中的类似,用于跳出最近的一级 for 或 while 循环。
continue 语句是从 C 中借鉴来的,它表示循环继续执行下一次迭代
pass 语句什么也不做
定义函数
关键字 def 引入了一个函数定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。函数体的第一行可以是一个字符串值,这个字符串是该函数的 (文档字符串(documentation string)),也可称作 docstring 。
引用参数时,会先从局部符号表中查找,然后是全局符号表,然后是内置命名表。
全局参数虽然可以被引用,但它们不能在函数中直接赋值
函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是传值调用
参数个数可变的函数
1.最有用的形式是给一个或多个参数指定默认值
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
2.函数可以通过参数关键字的形式来调用
parrot(action = 'VOOOOOM', voltage = 1000000)
3.不常用的选择是可以让函数调用可变个数的参数
def fprintf(file, format, *args):
如果要传递的参数已经是一个列表但要调用的函数却接受分开一个个的参数值,在调用函数时加一个 *操作符来自动把参数列表拆开
range(*args)
通过 lambda 关键字,可以创建很小的匿名函数
模块
标准模块
包通常是使用用“圆点模块名”的结构化模块命名空间。例如,名为 A.B 的模块表示了名为 "B" 的包中名为 "A"的子模块。
导入模块时,Python通过 sys.path 中的目录列表来搜索存放包的子目录
包用户可以从包中导入合法的模块,例如: import Sound.Effects.echo
使用 from package import item 方式导入包时,这个子项(item)既可以是包中的一个子模块(或一个子包),也可以是包中定义的其它命名,像函数、类或变量
包支持一个另为特殊的变量, __path__ 。 在包的 __init__.py 文件代码执行之前,该变量初始化一个目录名列表。该变量可以修改,它作用于包中的子包和模块的搜索功能
输入和输出
字符串格式化
标准模块 string包括了一些操作,将字符串填充入给定列时,这些操作很有用
使用 % 操作符,以某个字符串做为其左参数
Python总是把任意值传入 repr() 或 str() 函数,转为字符串。相对而言引号 (``) 等价于repr()
>>> repr(0.1)' 0.10000000000000001'
iterator
大多数容器对象都可以用 for 遍历:
for element in [1, 2, 3]: print element
for element in (1, 2, 3): print element
for element in range(len(data)-1, 1, -1): print element
for key in {'one':1, 'two':2}: print key
for char in "123": print char
for line in open("myfile.txt"): print line
在后台,for 语句在容器对象中调用 iter()。它在容器中逐一访问元素。没有后续的元素时,next() 抛出一个 StopIteration 异常通知 for 语句循环结束。

Class
类定义语法
最简单的类定义形式如下:

class ClassName:

.
.
.


类的定义就像函数定义( def 语句),要先执行才能生效。(你当然可以把它放进 if 语句的某一分支,或者一个函数的内部。)

定义一个类的时候,会创建一个新的命名空间,将其作为局部作用域使用——因此,所以对局部变量的赋值都引入新的命名空间。特别是函数定义将新函数的命名绑定于此。
类对象 Class Objects
类对象支持两种操作:属性引用和实例化
类的实例化使用函数符号。只要将类对象看作是一个返回新的类实例的无参数函数即可。例如:
x = MyClass()
类的实例化操作会自动为新创建的类实例调用 __init__() 方法。可以有参数
实例、方法对象
a method can called immediately like this: x.f()
or stored and used like this: xf = x.f; while True: print xf()
special notes
同名的数据属性会覆盖方法属性,因此应避免可能的命名冲突
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。但对 Python 而言,self 绝对没有任何特殊含义
继承
派生类的定义如下所示:
class DerivedClassName(BaseClassName):

Python同样有限的支持多继承形式。多继承的类定义形如下例:
class DerivedClassName(Base1, Base2, Base3):

私有变量
Python 对类的私有成员提供了有限的支持。任何形如 __foo随即都被替代为 _classname__foo

No comments: