日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python函数式编程、高阶函数

發布時間:2025/3/20 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python函数式编程、高阶函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、map()

python內置的高階函數,接收一個函數f和一個list,并通過把函數f依次作用在list的每個元素上,得到一個新的list并返回。

def f(x):return x * xprint map(f , [ 1 , 2 , 3 , 4 ])輸出----> [1,4,9,16]

注:map()并不改變原有的list,而是返回一個新的list

2、reduce()

內置高階函數,接收一個函數f和一個list。f必須接收兩個參數,reduc()對list的每個元素反復調用f,并返回最終結果值。

def f(x,y):reeturn x+y reduce(f,[1,3,5])運行----> f(1,3) = 4f(4,5) = 9 將上面使用 f 執行的到的結果作為這個 f 的第一個參數計算結果返回 9

reduce()可接收第三個可選參數,作為計算的初始值。

reduce(f,[1,3,5],100) 那么運算結果就是109

3、filter()
內置高階函數,作用類似于過濾。接收f和list,f的作用是對每一個元素進行判斷,返回True和False。filter()根據判斷結果自動過濾掉不符合條件的元素(False),返回由符合條件元素組成的新list。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # 篩選奇數 def is_add(x):return x % 2 == 1 filter( is_add , [1,4,6,7,9,12,17] )運行-----> [1,7,9,17]#刪除None或空字符串 def is_not_emptty(s):return s and len(s.strip()) > 0 filter(is_not_empty , ['test' , None, '' , 'str', ' ','END'])運行-----> ['test','str','END']

4、sorted() 可對list進行排序

>>>sorted([36,5,12,9,21])[5,9,12,21,36]

sorted也是一個高階函數,接收一個比較函數實現自定義排序。

比較函數的定義:

傳入兩個待比較的元素x,y

如果x應排在y前面,返回-1

如果x應排在y后面,返回1

如果x等于y,返回0

#實現倒序排序 def reversed_cmp(x,y):if x > y:return -1if x < y:return 1return 0sorted([36,5,12,9,21] , reversed_cmp)運行------> [36,21,12,9,5]

5、Python返回函數

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #返回函數和返回函數值的區別 def f():print 'call f()...'def g():print 'call g()...'return g #這兒返回的是指向g()這個函數的變量g #如果是 return g() 那么是返回g()這個函數計算的返回值>>> x = f() call f()... >>> x <function g at 0x10376f320> >>>x() call g()... #延遲計算

6、Python閉包

內層函數引用了外層函數的變量(參數也算變量),然后返回內層函數的情況,稱為閉包(Closure)。

閉包的特點是返回的函數還引用了外層函數的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數返回后不能變。

# 希望一次返回3個函數,分別計算1x1,2x2,3x3: def count():fs = []for i in range(1, 4):def f():return i*ifs.append(f)return fsf1, f2, f3 = count() #實際上返回結果并不是1,4,9 而是 9,9,9,#原因就是當count()函數返回了3個函數時,這3個函數所引用的變量 i 的值已經變成了3。由于f1、f2、f3并沒有被調用,#所以,此時他們并未計算 i*i,當 f1 被調用時:因為f1現在才計算i*i,但現在i的值已經變成3

因此,返回函數不要引用任何循環變量,或者后續會發生變化的變量。

修改上述代碼使之正確返回1,4,9

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def count():fs = []for i in range(1, 4):def f(m = i):return m * mfs.append(f)return fsf1, f2, f3 = count() print f1(), f2(), f3()

7、Python 匿名函數

#正常函數 def addNum(a,b):return a + b#等同的匿名函數 lam = lambda a,b:a+b #冒號前為參數

8、裝飾器@decorator

python內置的@語法就是為了簡化裝飾器調用

@new_fn def f1(x):def f1(x): -------> return x * 2return x * 2 f1 = new_fn(f1)

作用:

極大地簡化代碼。避免每個函數編寫重復代碼。

  • 打印日志:@log

  • 檢測性能:@preformance

  • 數據庫事物:@transaction

  • URL路由:@post(’/register’)

總結

以上是生活随笔為你收集整理的python函数式编程、高阶函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。