高階函式,①引數是函式的函式 、②返回值的函式的函式。
(1)引數是函式的函式
[前提] 變數可以指向函式,指向後變數名就覆蓋了函式名,就可以用變數名來呼叫函式。如:
print("abs:
",abs) #
abs:
a=abs
print("
a:",a) #
a: print(a(-5)) #
5
def幾個系統內建高階函式square(n):
return n*100
defadd(x,y,f):
return f(x)+f(y)
print(add(-1,-99,abs))
print(add(-1,-2,square))
map(1)格式:map(f,lnterator) map(f,[1,2,3,4,5,6,])。map函式有兩個引數,乙個是函式,乙個是lterator(迭代器)。
(2)函式功能:讓lnterator中的每乙個元素作為f函式的引數傳入,並將處理後的結果作為新的lterator返回。
(3)lterator是惰性序列,需要用list()函式讓它把整個list計算出來並返回乙個list。
defreducef(x):
return x*100t=map(f,[1,2,3,4,5,6])
(list(t))
k=map(f,(1,2,3,4,5,6))
print(list(k))
(1)格式:reduce(f,order) reduce(xc,[1,6,7,20])有兩個引數,乙個是函式,乙個是序列
exa01:將數字字串轉換為數
....
exa02:將str轉換為int
......
filter
返回值是乙個interator,惰性序列——>需要list()方法轉換
sorted 排序,返回值是排序好的一組新序列。
格式:sorted(一組序列,key=....,reverse=....) key關鍵字、reverse反轉逆序為可選項。
(2)函式作為返回值的函式,這種函式的結構是函式內部又定義乙個函式。外部函式的返回值是內部函式名。為什麼要這樣做?想
保留對傳入資料的演算法,但不想在現在得到運算後的結果。在想得到運算結果的時候,通過呼叫接受返回值的變數,來得到。
例:
def lazy_sum(*args): #閉包函式args:區域性變數
defsum():
ax=0
for n in args: #
內部函式可以訪問外部函式的區域性變數
ax=ax+n
return
ax
return
sums1=lazy_sum(2,2) #
s1只是保留了求和的「運算方法」,~=一條指令,這條指令在需要時呼叫。
print(s1()) #
呼叫保留了運算方法的『指令』
s2=lazy_sum(1,1)
(s2())
print("
s1==s2
",s1==s2) #
每次呼叫的函式不一樣
在乙個函式內部定義乙個函式,分別稱為外部函式、內部函式。內部函式只能在外部函式內部使用,無法在外部函式外部使用。如:
1內部函式可以使用外部變數,該類變數稱為「自由變數」。使用自由變數的內部函式就稱為閉包函式。deffun1():
2print("
fun1 is using")
3def
onfun1():
4print("
onfun1 is using")
5onfun1() 67
fun1()8#
onfun1() 輸出錯誤 910
#輸出11 fun1 is
using
12 onfun1 is using
1匿名函式,指在需要提供函式名的地方,用 「lambda傳入的引數:對引數的運算 」代替函式名。defcount():
2 m=0
3def
counter():
4 nonlocal m #
內部函式使用外部引數的宣告
5 m+=1
6returnm7
return
counter
89 c=count() #
c=count函式+外部環境資訊[全域性變數(對co unter而言)m]
1011
(c())
12print
(c())
13print
(c())
14print(c())
|「對函式的運算」只能是乙個表示式,相當於一般函式中的return語句。|
例:①map(lambda i : i*i,[1,3,5,7])代替了map(f
un,[1,3,5,7])
②匿名函式作為返回值
1posted @defsquaresum():
2return
lambda x,y : x*x+y*y
34 t=squaresum()
5print(t(2,6))
2019-03-26 16:01
versionk 閱讀(
...)
編輯收藏
Pyhton學習九 函式式程式設計
加粗樣式 toc 面向過程的程式設計 基本單元,函式 函式時程式設計 允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式!abs 10 是函式呼叫,abs是函式本身 要獲得呼叫結果,我們可以把結果賦值給變數 也可以把函式本身賦給變數,即變數指向函式,這樣可以實現通過變數來呼叫函式 absin ...
Pyhton函式式程式設計簡介(四)裝飾器
4 python函式是乙個物件,函式執行完後內部變數被 return的東西不會被 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 ...
函式式程式語言python 函式式程式設計
函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...