Python基礎--函數式編程


今天主要學習了Python函數式編程,在此總結一下


 

1.Python中函數也是一種對象,我們可以用變量來指向函數,並且實現調用。

f=abs
l=f(-10)
print(l)

#Output:10

 

2.函數中可以傳入函數,這樣的函數叫做高階函數。

f=abs

def add(a,b,f):
    c=a+b+abs(-1)
    print('sum is %d'%c)

add(1,2,f)

#Output:sum is 4

上述add方法中, f作為參數傳給了add。add方法是一個高階函數。

 

3.Python提供了許多強大的內建函數供調用。比如reduce、map、fliter、sorted。接下來簡要介紹一下這幾個函數。

 

在介紹上述幾個高階函數之前,我們需要先了解一些有關Iterator(迭代器)和Iterable(可迭代)的基礎知識。

給定一個list或者tuple,我們可以用for循環來遍歷至二個list或者tuple。這種遍歷稱為迭代(Iteration)。

 

 

凡是可以直接作用於for循環的對象統統稱為可迭代對象:Iterable。可用isinstance()來判斷一個對象是否是Iterable。

凡是可以被next()函數調用並不斷返回下一個值的對象稱為迭代器:Iterator。可用isinstanceoc判斷一個對象是否是Iterator對象。

Iterator是惰性的,他不會直接包含計算結果,可以使用list()把Iterator轉為一個list。

 

了解完Iterable和Iterator之后,我們回過來看map。

map(func,seq)

map函數是一個內置的高階函數。該方法把func 函數作用在參數seq的每一個元素上(這里的seq可以為list,可以為tuple),返回一個Iterator。

Iterator是一個惰性對象,他並不會直接包含你所想要的值,當你直接打印返回的Iterator時,你得到的並不會是你所期望的值,而是該對象的一些屬性(內存地址)。若要得到該對象的值,我們可以使用list強制Iterator把結果計算出來,最后得到的是一個list。

def f(x):
    return x*x
m=map(f,[1,2,3,4,5,6])
print(m)        #Output:<map object at 0x000002784869F128>
l=list(m)
print(l)        #Output:[1, 4, 9, 16, 25, 36]

 

reduce(func,seq)

reduce把func作用在seq的元素上,並把作用后的結果繼續與seq的下一個元素做累積。

比如實現一個累積求和:

from functools import reduce

def f(x,y):
    return x+y
s=reduce(f,[1,2,3,4,5,6])
print(s)        #Output:21    

 

fliter(func,seq)

fliter把func作用在seq上,並根據返回值是True還是False來決定保留還是丟棄該元素。簡單來說,fliter實現了一個篩選的功能。

def get_odd(x):
    return x % 2 == 1

s=filter(get_odd,[1,2,3,4,5,6])
print(list(s))        #Output:[1, 3, 5]

 

sorted(seq,key,reverse)

如其名,sorted常用於排序,默認的sorted排序是根據ASCII碼按照升序的方式來排列的。我們可以向sorted中傳入一個函數實現特定需求的排序。如果我們需要得到他的反向排序時,我們可以把reverse指定為True。sorted排序並不會影響到原來的序列。

num=[4,2,6,-5,-9,3,8]

#默認排序
print(sorted(num))        

#傳入函數abs(絕對值)
print(sorted(num,key=abs))    

#反向排序
print(sorted(num,key=abs,reverse=True))

Output:
[-9, -5, 2, 3, 4, 6, 8]
[2, 3, 4, -5, 6, 8, -9]
[-9, 8, 6, -5, 4, 3, 2]

 

可以看出,Python的函數式編程強大而靈活。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: