高階函數
- 變量可以指向函數:f=abs
- 函數名也是變量:
注意:由於abs函數實際上是定義在import builtins模塊中的,所以如果需要修改abs變量的指向在其他模塊也生效,需要使用:import builtins;builtins.abs=10
- 傳入函數
一個函數可以接受另一個函數作爲參數——高階函數
def add(x,y,f):
return f(x)+f(y)
print(add(5,-6,abs))
變量可以指向函數
-
map函數:
map(函數f,iterable)
把一個函數f,作用在可迭代對象上
(注:map()的返回值已經不再是list,而是iterators,直接使用會報錯<map object at 0x000001A8A5497048>
需要將iterator 轉換成list , 比如list(map()
)
(注:若函數中已經定義過一個list,則使用list(map())時會報錯TypeError: 'list' object is not callable
callable()是python的內置函數,用來檢查對象是否可被調用,(可被調用指的是對象能否使用()括號的方法調用)將自定義的列表名字修改,不叫list就可以了) -
reduce函數:作用在一個序列上,把結果繼續和序列的下一個元素做累積計算
reduce(函數fun,序列)
(注:使用rudece函數需要先導入:from functool import ruduce
)
(注:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)) -
lambda函數:(一個匿名函數)
lambda 參數:表達式
(注:參數:可選,如果提供,通常是逗號分隔的變量表達式形式,即位置參數)
(注:表達式:不能包含分支或循環(但允許條件表達式),也不能包含return(或yield)函數。如果爲元組,則應用圓括號將其包含起來) -
list.split(),split()函數通過指定分隔符對字符串進行切片,通常通常輸入的字符串需要分割處理
-
.upper()將字母轉換爲大寫,
-
.lower()將字母轉換爲小寫
-
raw_print()==print(),python3中使用print()代替raw_print(),在Python3中使用raw_python會報錯
name 'raw_input' is not defined
-
eval(expression[, globals[, locals]])
eval() 函數用來執行一個字符串表達式,並返回表達式的值
練習: -
利用map()函數,把輸入的英文名,變成首字母大寫其餘小寫
思路:
1、input()獲取輸入的str
2、str.split()切片,將輸入的str用','
分開成list
3、map(fun,list)函數,將函數作用到list的每個元素上
4、list(map()) 將得到一個list
5、list[0]即取第一個元素,list[1:]即取第二個及之後的元素
-
接收一個list並利用reduce()求積
思路:
1、定義pord()函數接收list
2、定義fun3(x,y)函數,實現乘積
3、使用reduce()函數,將fun3函數作用在L上
(2、或者使用匿名函數:lambda 參數:表達式)
-
把字符串’123.456’轉換成浮點數123.456
思路:
1、使用list.index(‘.’)函數,定位到“.”的位置n
2、使用map(int,list)將str強制轉換成int型
3、list(map()),組裝成list
4、以"."爲分界線,將list按照整數部分,小數部分拆分成兩個list
5、reduce(fun,list)將fun函數作用到list上,將list,變成整數/小數部分