学习8: 内建函数,匿名函数,偏函数

1. map(function,sequence)python

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次做用到序列的每一个元素,并把结果做为新的list返回函数

>>> map(abs, [-1,2,0,-9])
[1, 2, 0, 9]
>>> map(str, (1,2,3))
['1', '2', '3']
>>>

2. reducespa

reduce把一个函数做用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素作累积计算,其效果就是:code



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决定保留仍是丢弃该元素。blog

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。io

而sorted()方法就是全局的,它对任何可迭代的序列排序生成新的序列。function

>>> 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。class

 

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)
相关文章
相关标签/搜索