python函數式編程

函數式編程:容許把函數自己做爲參數傳入另外一個函數,還容許返回一個函數。python

1.高階函數編程

一個函數能夠接收另外一個函數做爲參數,這種函數稱爲高階函數閉包

def add(x,y,f):app

      return f(x) + f(y)函數式編程

 

x = -5 、y = 六、  f = abs、  f(x) + f(y) = abs(-5) + abs(6) = 11函數

return 11spa

2.map/reducecode

map函數:接收兩個參數,一個是函數,一個是可迭代對象。map的做用是將傳入的函數依次做用到序列的每一個元素,並將結果做爲迭代器返回對象

>>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce函數:接收兩個參數,一個是函數,一個是可迭代對象。reduce的做用是將每個元素的函數結果做用到下一個元素中排序

reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

def prod(x,y):
      return x * y

print(reduce(prod,[1,3,5]))   #15

3.filter

filter函數用於過濾序列,一樣接收函數和可迭代對象,將函數做用於每個元素中,而後進行篩選

4.sorted

排序函數能夠直接比較兩個元素的大小

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) ['about', 'bob', 'Credit', 'Zoo']

5.返回函數

函數嵌套函數時,將內部函數做爲結果進行返回。內部函數能夠引用外部函數的參數和局部變量。這種方式稱爲閉包。

返回函數不要引用任何循環變量,或者是變化的變量。函數的返回值不是當即執行,而是在調用以後纔開始執行。若要使用循環變量,則須要再建立新的函數,將該變量做爲參數傳入。

6.匿名函數

lambda x : x * x   =    def f(x):

                                        return x * x

也能夠先將匿名函數賦值給變量,再調用該變量。

7.裝飾器

在代碼動態運行期間動態增長功能,被稱爲裝飾器(就是用一個透明的大函數包裹起來,在程序運行時調用這個函數)

#定義

def log(func):

      def wrapper(*args,**kw):

            print('call %s():' % func.__name__)  #兩橫

            return func(* args,**kw)

      return wrapper

 

@log                                  =                 now = log(now)

def   now():

        print('2018-12-11')

#調用

now()

#輸出

call  now():

2018-12-11

8.偏函數

偏函數位於functools的模塊中,名稱爲partial。做用爲將一個函數的某些參數給固定住,返回一個新的函數,從而加強做用。

相關文章
相關標籤/搜索