匿名函数不会在任何空间里创建名字,故可以节省大量开销。这是匿名函数lambda的使用示例:
a=lambda x,y=2:x+y
是这样调用它的:
a(3)
a(3,5)
分别输出5(3+2)和8(3+5)
接下来是内建函数filter(),map(),reduce()分别用于过滤,映射,迭guolvqi代。
1)filter()过滤器
源代码大致如此:
def filter(bool_func,seq):filtered_seq=[]for eachItem in seq:if bool_func(eachItem):filtered_seq.append(eachItem)return filtered_seq
原理是当判为true时加入新的filtered_seq列表中去,否则舍去
bool_func是过滤法则,seq是传入列表,filtered_seq是传出列表
示例脚本:该脚本产生一个较大的随机数集合,在过滤掉所有偶数,留下奇数
from random import randint as ri
print(n for n in [ri(1,99)for i in range(9)]if n%2)
下面这种写法更直接:
from random import randint
def odd(n):return n%2allNums=[]
for eachNum in range(9):allNums.append(randint(1,99))
print(filter(odd,allNums))
但是上一种开销更少更简洁。且没有使用filter(),因为尽量避免使用函数可以减少程序不必要的开销。
2)map()映射函数
给出大致源代码:
def map(func,seq):mapped_seq=[]for eachItem in seq:mapped_seq.append(eachItem)return mapped_seq
func是映射规则,seq是传入的原列表,mapped_seq是返回后的映射内容
可用于散列表(字典)的创建过程中。
不多细讲。
3)reduce()迭代器
这种也称之”折叠“,类似这样:
reduce(func,[1,2,3])
func(func(1,2),3)
他们作用是等价的。
给出一个示例:
print('the total is:',reduce((lambda x,y:x+y),range(5))
输出the total is 10,实际上进行了如此的操作:(((0+1)+2)+3)4)