(十一)函数<4>几个特殊函数

2019-01-04  本文已影响0人  费云帆

1.lambda()---匿名函数,可以把函数压缩在一行里搞定:

def add(x):
    x+=3
    return x

numbers=range(10)
new_numbers=[]
for i in numbers:
    new_numbers.append(add(i))
print(new_numbers)
>>>
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# 或者这么做
numbers=[i+3 for i in range(10)]
print(numbers)
>>>
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
lam=lambda x:x+3
#lam=lambda x:x+=3 这种语法是错的
numbers=range(10)
new_numbers=[]
for i in numbers:
    new_numbers.append(lam(i))
print(new_numbers)
>>>
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
add=lambda x,y:x+y
print(add(3,4))
>>>7
# 看样子,还是赋值给变量看起来比较舒服
print((lambda x:x**2)(5))
>>>25
squares=[lambda x:x,lambda x:x**2,lambda x:x**3,lambda x:x**4]
for i in squares:
    print(i(5))
>>>
5
25
125
625

记住,lambda是一个单行的函数.之前也有这样的单行函数:

def function():pass

2.map(func,seq)---把seq序列的值依次取出来,塞进函数func里面,再返回func计算的结果:

def add(x):
    x+=3
    return x

numbers=[1,2,3,4,5,6,7]
#print(list(map(add,numbers)))
print(list(map(lambda x:x+3,numbers)))
>>>
[4, 5, 6, 7, 8, 9, 10]

在应用中,map的所能实现的,也可以用别的方式实现。比如:

>>> items = [1,2,3,4,5]
>>> squared = []
>>> for i in items:
... squared.append(i**2)
...
>>> squared
[1, 4, 9, 16, 25]
>>> def sqr(x): return x**2
...
>>> map(sqr,items)
[1, 4, 9, 16, 25]
>>> map(lambda x: x**2, items)
[1, 4, 9, 16, 25]
>>> [ x**2 for x in items ] # 推荐这个,一般情况下速度足够快,而且可读性强
[1, 4, 9, 16, 25]
>>> lst1 = [1, 2, 3, 4, 5]
>>> lst2 = [6, 7, 8, 9, 0]
>>> map(lambda x, y: x + y, lst1, lst2) #将两个列表中的对应项加起来,并返回一个结果列表
[7, 9, 11, 13, 5]
>>> lst1 = [1, 2, 3, 4, 5]
>>> lst2 = [6, 7, 8, 9, 0]
>>> lst3 = [7, 8, 9, 2, 1]
>>> map(lambda x,y,z: x+y+z, lst1, lst2, lst3)
[14, 17, 20, 15, 6]

这才显示出map的简洁优雅。
总而言之,map()---优雅处理序列和函数的映射关系
zip()---用来处理序列和序列之间关系的
3.reduce()---横向逐个运算,map()是上下运算:

# reduce
>>> from functools import reduce
>>> reduce(lambda x,y:x+y,[1,2,3,4,5])
15
>>> list1=[1,2,3,4,5]
>>> list2=[5,4,3,2,1]
>>> list(map(lambda x,y:x+y,list1,list2))
[6, 6, 6, 6, 6]

4.filter()---过滤器:
filter(function or None, iterable) --> filter object
传入函数和序列,筛选出需要的数据(这里的函数当作过滤的规则)

>>> number=range(-5,5)
# 筛选大于0的数据
>>> list(filter(lambda x:x>0,number))
[1, 2, 3, 4]
# 筛选除了"i"的所有字母
>>> list(filter(lambda x:x!='i','qiwsir'))
['q', 'w', 's', 'r']
上一篇 下一篇

猜你喜欢

热点阅读