【python菜鸟日记】-00 从入门指南开始

http://www.pythontab.com/html/pythonshouce27/


5.1.3. 函数式编程工具

对于链表来讲,有三个内置函数非常有用: filter()map(), 和 reduce() 。

filter(function, sequence) 返回一个sequence(序列),包括了给定序列中所有调用 function(item) 后返回值为true的元素。(如果可能的话,会返回相同的类型)。如果该 序列 (sequence) 是一个 string (字符串)或者tuple (元组),返回值必定是同一类型,否则,它总是 list 。例如,以下程序可以计算部分素数

>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]

map(function, sequence) 为每一个元素依次调用 function(item) 并将返回值组成一个链表返回。例如,以下程序计算立方

>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

可以传入多个序列,函数也必须要有对应数量的参数,执行时会依次用各序列上对应的元素来调用函数(如果某些序列比其它的短,就用 None 来代替)。如果把 None 做为一个函数传入,则直接返回参数做为替代。例如

>>> seq = range(8)
>>> def add(x, y): return x+y
...
>>> map(add, seq, seq)
[0, 2, 4, 6, 8, 10, 12, 14]

reduce(func, sequence) 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function ,再以返回值和第三个参数调用,依次执行下去。例如,以下程序计算 1 到 10 的整数之和

>>> def add(x,y): return x+y
...
>>> reduce(add, range(1, 11))
55

如果序列中只有一个元素,就返回它,如果序列是空的,就抛出一个异常。

可以传入第三个参数做为初始值。如果序列是空的,就返回初始值,否则函数会先接收初始值和序列的第一个元素,然后是返回值和下一个元素,依此类推。例如

>>> def sum(seq):
...     def add(x,y): return x+y
...     return reduce(add, seq, 0)
...
>>> sum(range(1, 11))
55
>>> sum([])
0

不要像示例中这样定义 sum() :因为合计数值是一个通用的需求,早已有内置的 sum(sequence) 函数,非常好用。

New in version 2.3.


5.2. del 语句

有个方法可以从列表中按给定的索引而不是值来删除一个子项: del 语句。它不同于有返回值的 pop() 方法。语句 del 还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。例如

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

del 也可以删除整个变量

>>> del a

此后再引用命名 a 会引发错误(直到另一个值赋给它为止)。我们在后面的内容中可以看到 del 的其它用法。


你可能感兴趣的:(python)