學習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)
相關文章
相關標籤/搜索