Python之函數式編程---第十天

1、當下主流的編程方法:

  • 函數式編程:函數語言裏定義的函數+數學意義的函數
    函數式編程定義:就是用編程語言去實現數學函數,這種函數內對象是永恆不變的,要麼參數是函數,要麼返回值是函數,沒有for和while循環,所有的循環都由遞歸去實現,無變量的賦值(即不用變量去保存狀態),無賦值即不改變。
    (1)優點:代碼可讀性好,寫起來簡單
    (2)缺點:所有變量在程序運行期間是一直存在的,很佔用資源,

2、函數式編程的特點

(1)不可變數據:不用變量保存狀態,不修改變量

#非函數式:
a=1
def test1():
    global a
    a+=1
    return a
test1()
print(a)

#輸出結果:2
#函數式:
n=1
def test2(n):
    return n+1
print(test2(2))
print(n)

#輸出結果:
3
1

(2)第一類對象:函數即“變量”

  • 參數可以是函數名
  • 返回值可以是函數

(3)尾調用優化(尾遞歸):在函數的最後一步調用另一個函數(最後一行不一定是函數的最後一步,因爲去調用了其他函數)

  • 情況一:尾部調用其他函數
def bar(n):
    return n
def foo(m):
    return bar(m)

對比非尾調用

def bar(n):
    return n
def foo(m):
    k=bar(m)
    return k

注意:這時候是不輸出任何結果的,return不會輸出,只是把函數執行的結果返回並保留在內存;而print則是一般的輸出

  • 情況二:函數中有if判斷語句
    因爲有if判斷語句不一定返回哪個值

3、尾調用的好處
尾調用的關鍵就是在於在函數的最後一步去調用別的函數,那麼最後一步調用,有什麼好處呢?
根據“函數即變量”的風溼理論,定義a函數,a內調用b函數,在內存中會形成一個調用記錄,又稱“調用幀”,用於保存調用位置和內部變量等信息,即a–>b–>c,直到c返回結果b,c的調用記錄纔會消失,b返回給a,b的調用記錄消失,a返回結果,a的調用記錄消失,所有的調用記錄,都是先進後出,形成了一個“調用棧”
尾調用由於是函數的最後一步操作,所以不需要保留外層的調用記錄,因爲調用位置,內部變量等信息都不會再用到了,只要直接用內層函數的調用記錄,取代外層函數的調用記錄就可以了

、函數式和非函數式的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章