python函數語言程式設計詳解

ckxllf發表於2020-03-03

  函數語言程式設計:是指程式碼中每一塊都是不可變的,都由純函式的形式組成。這裡的純函式,是指函式本身相互獨立、互不影響,對於相同的輸入,總會有相同的輸出。並且允許把函式本身作為引數傳入另一個函式,還允許返回一個函式。

  例如實現列表元素的二次方:

  def multiply_2(list):

  new_list=[]

  for i in list:

  new_list.append(item**2)

  return new_list

  # 函數語言程式設計的優點,主要在於其純函式和不可變的特性使程式更加健壯,易於除錯和測試;缺點主要在於限制多,難寫。

  純粹的函數語言程式設計語言(比如 Scala),其編寫的函式中是沒有變數的,因此可以保證,只要輸入是確定的,輸出就是確定的;而允許使用變數的程式設計語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出。

  Python 允許使用變數,所以它並不是一門純函數語言程式設計語言。Python 僅對函數語言程式設計提供了部分支援,主要包括 map()、filter() 和 reduce() 這 3 個函式,它們通常都結合 lambda 匿名函式一起使用。

  python map()函式

  基本語法格式:

  map(function,iterable)

  # function 參數列示要傳入一個函式,其可以是內建函式、自定義函式或者 lambda 匿名函式;iterable 表示一個或多個可迭代物件,可以是列表、字串等

  函式的功能:

  對可迭代物件的每一個元素,都呼叫傳入的函式,並返回一個map物件

  注意的是該map物件不能直接列印出來,需要透過for迴圈遍歷或者將其透過list()轉化為list物件才能顯示出來

  示例:

  list_demo=[6,7,8]

  new_list=map(lambda x:x**2,list_demo)

  print(list(new_list))

  map() 函式是直接由用 C 語言寫的,執行時不需要透過 Python 直譯器間接呼叫,並且內部做了諸多最佳化,所以相比其他方法,此方法的執行效率最高。

  python filter()函式

  基本語法格式: 鄭州人流醫院哪家好

  filter(function,iterable)

  #功能是對 iterable 中的每個元素,都使用 function 函式判斷,並返回 True 或者 False,最後將返回 True 的元素組成一個新的可遍歷的集合。

  示例:

  list_demo=[6,7,8]

  new_list=filter(lambda x:x%2==0,list_demo)

  print(list(new_list))

  python reduce()函式

  基本語法格式:

  reduce(function,iterable)

  # 其中,function 規定必須是一個包含 2 個引數的函式;iterable 表示可迭代物件。

  reduce() 函式通常用來對一個集合做一些累積操作.

  使用之前需要匯入functools模組

  示例:

  # 計算列表乘積

  import functools

  list_demo=[6,7,8]

  result=functools.reduce(lambda x,y:x*y,list_demo)

  print(result)

  綜合來看:

  當對集合中的元素進行一些操作時,如果操作非常簡單,比如相加、累積這種,那麼應該優先考慮使用 map()、filter()、reduce() 實現。另外,在資料量非常多的情況下(比如機器學習的應用),一般更傾向於函數語言程式設計的表示,因為效率更高。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2678256/,如需轉載,請註明出處,否則將追究法律責任。

相關文章