Pyhton 函式式程式設計

2021-09-19 02:57:19 字數 3248 閱讀 2116

高階函式,①引數是函式的函式 、②返回值的函式的函式。

(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。

def

f(x):

return x*100t=map(f,[1,2,3,4,5,6])

print

(list(t))

k=map(f,(1,2,3,4,5,6))

print(list(k))

reduce

(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)

print

(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

defcount():

2 m=0

3def

counter():

4 nonlocal m #

內部函式使用外部引數的宣告

5 m+=1

6returnm7

return

counter

89 c=count() #

c=count函式+外部環境資訊[全域性變數(對co unter而言)m]

1011

print

(c())

12print

(c())

13print

(c())

14print(c())

匿名函式,指在需要提供函式名的地方,用 「lambda傳入的引數對引數的運算 」代替函式名。

|「對函式的運算」只能是乙個表示式,相當於一般函式中的return語句。|

例:①map(lambda i : i*i,[1,3,5,7])代替了map(f

un,[1,3,5,7])

②匿名函式作為返回值

1

defsquaresum():

2return

lambda x,y : x*x+y*y

34 t=squaresum()

5print(t(2,6))

posted @

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,雖然也可以歸結...