函式式程式設計

2022-08-17 03:18:16 字數 2535 閱讀 2963

1、高階函式:把函式作為引數傳入,這樣的函式稱為高階函式。函式式程式設計就是指這種高度抽象的程式設計正規化。

2、python內建了map() 和 reduce()

3、map()函式接收兩個引數:乙個函式,乙個是序列;map將傳入的函式依次作用到序列的每個元素,並把結果作為新的list返回

eg:函式f(x)=  x2   ,要把這個函式作用在乙個list[1,2,3,4,5,6,7,8,9]上,就可以使用map實現

方法一:

def f(x):

return x*x

>map(f,[1,2,3,4,5,6,7,8,9])[1, 4, 9, 16, 25, 36, 49, 64, 81]

方法二:

l=for n in [1,2,3,4,5,6,7,8,9]:

print l

map()函式計算簡單,可以計算任意複雜的函式,比如,吧list所有數字轉為字串:>map(str,[1,2,3,4,5,6,7,8,9])['1', '2', '3', '4', '5', '6', '7', '8', '9']

利用map()函式,把使用者輸入的不規範的英文名字,變為首字母大寫,其他小寫的規範名字。輸入:['adam', 'lisa', 'bart'],輸出:['adam', 'lisa', 'bart']

4、reduce()把乙個函式作用在序列[x1,x2,,,]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做積累計算

def add(x,y):

return x+y

>reduce(add,[1,3,5,7,9])  25

5、python內建函式 filter() 用於過濾序列。也接收乙個函式和序列。

filter()把傳入的函式依次作用於每個元素,然後根據返回值是 true 還是 false 決定保留還是丟棄該元素

eg:在乙個list中,刪除偶數,只保留奇數

def io_odd(n):

return n%2==1

>filter(is_odd,[1,2,4,5,6,9,10,15])    [1,5,9,15]

eg:把乙個序列中的空字串刪掉

def not_empty(s):

return s and s.strip()

>filter(not_empty,['a',『  』,『b』,『c』,none,『  』])  [『a』,『b』,『c』]

6、python內建的 sorted() 函式可以對list進行排序;>sorted([36,5,12,9,21])  [5,9,12,21,36]

sorted()函式也是乙個高階函式,它可以接收乙個高階函式。還可以接收乙個比較函式來實現自定義的排序

eg:def reversed_cmp(x,y):

if x>y:

return -1

if xreturn 1

if x>y:

return 0

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

eg:>sorted(['bob', 'about', 'zoo', 'credit'])   ['credit', 'zoo', 'about', 'bob']

預設情況下,對字串排序,是按照ascii的大小比較的

需求:排序忽略大小寫,按照字母排序  分析:實際上就是先把字串都變成大寫或小寫,再比較

def cmp_ignore_case(s1, s2):

u1 = s1.upper()   //upper()方法字串中的小寫字母轉為大寫字母,返回所有基於字元被轉換為大寫的字串的乙個副本;; 

u2 = s2.upper()   //eg:s = "hello good boy doiido 123456"  print s.upper() 結果:hello good boy doiido 123456

if u1 < u2:

return -1

if u1 > u2:

return 1

return 0

>sorted(['bob', 'about', 'zoo', 'credit'], cmp_ignore_case)   ['about', 'bob', 'credit', 'zoo']

7、匿名函式:關鍵字 lambda 表示匿名函式,冒號前面表示 函式引數。匿名函式有個限制,就是只能有乙個表示式,不用寫return,返回值就是該表示式的結果

eg:以map()函式為例:>map(lambda x:x*x,[1,2,3,4,5,6])

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...

函式式程式設計

最近在看一些關於js方面的東東,除了些ajax的基本應用,還了解了些函式式程式設計 fp 的東東。雖然以前也玩過幾天lisp的,不過因為當時完全對fp的東西沒有概念,壓根就不知道原來這是list那一族最大的特性之一 另外我知道的還有個是gc,orz.光注意那些詭異的 表 去了。總結一下,傳統上認為f...

函式式程式設計

維基百科 函式式程式設計 英語 functional programming 或者函式程式設計,又稱泛函程式設計,是一種程式設計范型,它將計算機運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函式程式語言最重要的基礎是 演算 lambda calculus 而且 演算的函式可以接受函式當...