Python學習札記(二十) 函數式編程1 介紹 高階函數介紹

參考:

函數式編程python

高階函數編程

Note

A.函數式編程(Functional Programming)介紹編程語言

1.函數是Python內建支持的一種封裝,咱們經過一層一層的函數調用把複雜任務分解成簡單的任務,這種分解能夠稱之爲面向過程的程序設計。函數就是面向過程的程序設計的基本單元。這一點和C語言是一致的。函數式編程

2.計算機和計算的概念:函數

a.在計算機的層次上,CPU執行的是加減乘除的指令代碼,以及各類條件判斷和跳轉指令,因此,彙編語言是最貼近計算機的語言。ui

b.計算則指數學意義上的計算,越是抽象的計算,離計算機硬件越遠。設計

所以對應到編程語言:越低級的語言,越貼近計算機,抽象程度低,執行效率高,好比C語言;越高級的語言,越貼近計算,抽象程度高,執行效率低,好比Lisp語言。code

  • 函數式編程就是一種抽象程度很高的編程範式;
  • 純粹的函數式編程語言編寫的函數沒有變量 => 任意一個函數,只要輸入是肯定的,輸出就是肯定的 => 咱們稱之爲沒有反作用。
  • 而容許使用變量的程序設計語言 => 函數內部的變量狀態不肯定,一樣的輸入,可能獲得不一樣的輸出 => 這種函數是有反作用的。

3.函數式編程的一個特色就是,容許把函數自己做爲參數傳入另外一個函數,還容許返回一個函數。get

4.Python對函數式編程提供部分支持。因爲Python容許使用變量,所以,Python不是純函數式編程語言。input

B.高階函數 Higher-order function

1.變量能夠指向函數:

#!/usr/bin/env python3

a = abs(-10)

print(a)

b = abs

print(b)
sh-3.2# ./intro.py 
10
<built-in function abs>

結論:函數自己也能夠賦值給變量,即:變量能夠指向函數。

能夠經過指向函數的變量來調用該函數:

print(b(-199))
199

說明如今變量b指向函數abs(),調用b()至關於調用abs()。

2.函數名是變量:函數名其實就是指向函數的變量。

例如,對於abs()這個方法,abs徹底就是指向該函數的變量。可是若是將abs指向其餘object,就沒法再次調用abs原來指向的函數。

abs = 10

print(abs)

print(abs(-10))
10
Traceback (most recent call last):
  File "./intro.py", line 17, in <module>
    print(abs(-10))
TypeError: 'int' object is not callable

注:abs函數自己來自模塊builtins,若要改動整個模塊的abs指向,使用如下語句:

import builtins

builtins.abs = 10

3.傳入函數:既然變量能夠指向函數,函數的參數能接收變量,那麼一個函數就能夠接收另外一個函數做爲參數,這種函數就稱之爲高階函數。

例如:一個簡單的高階函數

#!/usr/bin/env python3

def addtwonums(a, b) :
    return a+b

def func(a, b, f) :
    return f(a, b)

def main() :
    a = int(input())
    b = int(input())
    f = addtwonums

    print(func(a, b, f))

if __name__ == '__main__':
    main()
sh-3.2# ./intro2.py 
100
99
199

4.把函數做爲參數傳入,這樣的函數稱爲高階函數,函數式編程就是指這種高度抽象的編程範式。

2017/2/10

相關文章
相關標籤/搜索