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 而且 演算的函式可以接受函式當...