高階函式 閉包

2021-08-11 21:25:13 字數 2214 閱讀 5838

f用於{}的格式化,{}內是變數或函式的某個形參;%s這種格式化不行

def func():

name='小明'

print(

f'good morning,')

func()

def func(name):

print(

f'good morning,')

func('小明')

****************************************分割線****************************************

高階函式:引數為函式;閉包:返回值為函式;裝飾器:返回值為函式的高階函式

高階函式:

from functools import reduce

def accumulate(start,end,handle,sign):

t= map(

handle

,range(start,end+1)) 

#首參的函式體內若用了lambda,此處就要改為加()的v了

return  

reduce

(lambda x,y:

eval('%s%s%s' %(x,sign,y)),t)

#map的首參函式,其內的引數個數不定,同一列表中的各元素互不影響,返回一

串值;# 而reduce的首參函式內必須是倆參,迭代處理二參列表中的各元素,返回一

個值def add(start,end,handle):

return accumulate(start,end,handle,'+')

def product(start,end,handle):

return accumulate(start,end,handle,'*')

def handle(n):

return n**3

print(add(1,5,handle))

**********************分割線

**********************

變數在使用前要先有初始值,函式式變數亦同:在使用函式作引數時,表面上在上文要已有這個函式的定義,除非是跟在return的後面(其實在機器內依然是走在return的前面——因為在執行到函式內的return時,已先一步自上而下掃瞄過所有的def頭了;在呼叫函式時是直接進入函式體內,不再重複掃瞄def頭)

def abc(): #第1句

return x #第4句

x='qwerty' #第2句

print(abc()) #第3句

#上述**,若改為def abc(x)……print(abc('helloworld')),即函式頭中的形參變數和函式體外的全域性變數衝突,那麼return x使用的是下文傳來的實參helloworld,否則就只能退而求其次地選用函式體外的全域性變數x。

若為def abc(y),那麼return x迫於無奈也只能使用全域性變數x——優先形參,找不到形參時方採用全域性變數

****************************************分割線****************************************

閉包:

def count():

#x=i:x是匿名函式的形參,i是實參;不寫=i,則報錯lambda()缺少引數(實參)

t=[lambda x

=i:x*x for

i in range(1,4)] 

#生成3個傳來了實參的函式體

return t

x,y,z=count()

print(x(),y(),z(),sep=';')

*******************分割線

*******************

def func():

x,y=1,2

return lambda m=x,n=y:m+n

#m=x,n=y:x和y是預設實參

print(func()()) #輸出3

print(func()(3,7))  

#輸出10

*******************分割線

*******************

def build(x, y):

return lambda: x * x + y * y

#不加lambda,返回的是int;加了返回的則是function

print(build(2,3)())

函式高階(閉包)

def outer func loc list def inner func name print s loc list s name,loc list return inner func clo func 0 outer func clo func 0 clo func 0 clo func 0 ...

Python 高階函式 閉包

閉包 什麼是閉包 如果在乙個內部函式裡,對在外部作用域 但不是在全域性作用域 的變數進行引用,那麼內部函式就被認為是閉包。需要滿足的條件 1 乙個函式內巢狀乙個函式 2 外部函式的返回值必須是這個內部函式 3 內部函式必須使用外部函式中的區域性變數 def fun 1 num 1 9 def fun...

11 函式高階 閉包

內部函式對外部函式作用域裡變數的引用 非全域性變數 則稱內部函式為閉包。def outer n 10 def inner print inner n return inner val outer print val val 閉包的意義 返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用...