学习8: 内建函数,匿名函数,偏函数
2017-02-08 11:04 一方书斋 阅读(300) 评论(0) 编辑 收藏 举报1. map(function,sequence)
map()
函数接收两个参数,一个是函数,一个是序列,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回
>>> map(abs, [-1,2,0,-9]) [1, 2, 0, 9] >>> map(str, (1,2,3)) ['1', '2', '3'] >>>
2. reduce
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> def fn(x, y): ... return x * 10 + y ... >>> reduce(fn, [1, 3, 5, 7, 9]) 13579 >>>
3. filter
filter()
也接收一个函数和一个序列。和map()
不同的时,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
def test(x): if x%3 == 0: return True else: return False print filter(test, [2,3,4,6])
4. sorted
Python list内置sort()方法用来排序, 但是list.sort()方法仅被定义在list中,只能作用于list。
而sorted()方法就是全局的,它对任何可迭代的序列排序生成新的序列。
>>> a=[9,7,0,3,5,2] >>> id(a) 48400392L >>> a.sort() >>> a [0, 2, 3, 5, 7, 9] >>> id(a) 48400392L >>> >>> a=[9,7,0,3,5,2] >>> sorted(a) [0, 2, 3, 5, 7, 9] >>> a [9, 7, 0, 3, 5, 2] >>>
从上面可以看出使用list.sort()方法来排序,此时list本身将被修改,而用sorted()方法会返回一个新的list,不影响原先list。
5. lambda
关键字lambda
表示匿名函数。
lambda会创建一个函数对象,但不会把这个函数对象赋给一个变量,而def则会把函数对象赋值给一个变量。
另外lambda只是一个表达式,而def则是一个语句。简单的说在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。
>>> f = lambda x:x*2
>>> f(3)
6.偏函数
通过functools.partial
帮助我们创建一个偏函数,作用就是把一个函数的某些参数给固定住(也就是设置默认值)返回一个新的函数,
调用这个新函数会更简单,而且不用更改原始函数。
import functools def test(x,y): print x+y test2=functools.partial(test,y=2) test2(3)
这里函数test定义了两个参数,如果某种情况下y一直是2的情况,那么我们可以重新生成一个新的函数test2将参数y给固定,
然后调用test2就相对简单一点,而且没有更改原先的函数。 当然也可以更改原先函数设置默认值即可,如下:
def test(x, y=2): print x+y test(4)