這篇文章簡談高階函式與python3中幾個內建函式的例題
高階函式就是能接受函式作引數的函式。
我們知道變數可以指向函式,而函式的引數可以接受變數,
乙個函式可以接收另乙個函式作為引數,
能接受函式作為引數的函式就是高階函式。
比如說,乙個簡單的高階函式:
def
shu_1()
:print
("宇宙之大"
)def
shu2
(x):
z=x(
)print
("個人之小"
)shu2(shu_1)
#引數為函式
內建函式與高階函式例題中的使用:
math.sqrt函式(內建數學模組中的函式)
題目:乙個使用數學模組中計算兩數平方根之和的函式:
import math
defadd
(x, y, f)
:return f(x)
+ f(y)
#x和y可以傳任意傳入,f我們則傳入乙個計算平方根的函式
print
(add(25,
25,math.sqrt)
)
map()函式
map() 會根據提供的函式對指定序列做對映。
用法:map(function, iterable, …)
function – 函式, iterable – 乙個或多個序列。
題目:沒有按照首字母大寫,後續字母小寫的規則,請利用map()函式,把乙個list(包含若干不規範的英文名字)變成乙個包含規範英文名字的list
def
format_name
(s):
return s.title(
)list
(map
(format_name,
['adam'
,'lisa'
,'bart'])
)
reduce函式
reduce函式也是乙個引數為函式,乙個為可迭代物件的高階函式,其返回值為乙個值而不是迭代器物件,故其常用與疊加、疊乘等。
題目:請利用recude()來求積:
輸入:[2, 4, 5, 7, 12]
輸出:245712的結果
from functools import
reduce
#在python3中reduce函式不再是內建函式,需要從functools模組匯入
defprod
(x, y)
:return x*y
print
(reduce
(prod,[2
,4,5
,7,12
]))
filter函式
filter()函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
例題:請利用filter()過濾出1~100中平方根是整數的數,即結果應該是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
import math
defis_sqr
(x):
r=int(math.sqrt(x)
)#取整數用下一步計算判斷其平方是否等於原值
return r*r==x
list
(filter
(is_sqr,
range(1
,101))
)
sorted函式
sorted 語法:
sorted(iterable, key=none, reverse=false)
引數說明:
iterable – 可迭代物件。
key – 主要是用來進行比較的元素,只有乙個引數,具體的函式的引數就是取自於可迭代物件中,指定可迭代物件中的乙個元素來進行排序。
reverse – 排序規則,reverse = true 降序 , reverse = false 公升序(預設)。
sorted與sort不同之處有幾點:sort 是應用在 list 上的方法,sorted 可以對所有可迭代的物件進行排序操作。
list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函式 sorted 方法返回的是乙個新的 list,而不是在原來的基礎上進行的操作。
題目:對字串排序時,有時候忽略大小寫排序更符合習慣。請利用sorted()高階函式,實現忽略大小寫排序的演算法。
輸入:[『bob』, 『about』, 『zoo』, 『credit』]
輸出:[『about』, 『bob』, 『credit』, 『zoo』]
def
cmp_ignore_case
(s1, s2)
: x = s1.upper(
) y = s2.upper(
)if xreturn-1
if x>y:
return
1return
0print
(sorted([
'bob'
,'about'
,'zoo'
,'credit'
], key =
lambda x: x.upper())
)#注釋如下
- 對key =
lambda x: x的注釋:當待排序列表的元素由多字段構成時,我們可以通過sorted引數key來制定我們根據那個欄位對列表元素進行排序。
key=
lambda 元素: 元素[字段索引]
例如:想對元素第二個字段排序,則
key=
lambda x: x[1]
-->
python還有很多內建高階函式。我們先寫到這裡。 python3函式高階
1.命名空間和作用域 命名空間 載入內建命名空間 python直譯器自帶的變數和函式 開啟python直譯器自動載入內建命名空間 全域性命名空間 程式從頭到尾的自定義變數和函式 從頭到尾載入 區域性命名空間 函式內部的自定義變數和函式 內嵌函式 當函式被呼叫時,建立該函式的區域性命名空間,當函式執行...
Python3 高階函式
滿足其一即是 函式名作實參傳給函式 不修改被修飾函式源 的情況下為其新增功能 返回值含函式名 不修改函式呼叫方式 def add x,y,f return f x f y res add 3,6,abs print res 1 import time defsuspend time.sleep 3 ...
python3 函式 高階函式
函式本身也可以賦值給變數,即 變數可以指向函式 f abs print f 輸出 in function abs 對於abs 這個函式,完全可以把函式名abs看成變數,它指向乙個可以計算絕對值的函式。如果把abs指向其他物件 abs 10 print abs 10 輸出 traceback most...