day16 函式物件和閉包

2021-10-10 23:42:57 字數 1943 閱讀 8136

二 閉包函式

函式物件指的是函式可以被當做』資料』來處理,具體可以分為四個方面的使用,我們如下

>>

>

defadd

(x,y):.

..return x+y..

.>>

> func=add

>>

> func(1,

2)3

>>

> dic=

>>

> dic

>>

> dic[

'add'](

1,2)

3

>>

>

deffoo

(x,y,func):.

..return func(x,y)..

.>>

> foo(1,

2,add)

3

def

bar():

return add

func=bar(

) func(1,

2)3

基於函式物件的概念,可以將函式返回到任意位置去呼叫,但作用域的關係是在定義完函式時就已經被確定了的,與函式的呼叫位置無關。

x=

1deff1(

):deff2()

:print

(x)return f2

deff3()

: x=

3 f2=f1(

)#呼叫f1()返回函式f2

f2()#需要按照函式定義時的作用關係去執行,與呼叫位置無關

f3()

#結果為1

也就是說函式被當做資料處理時,始終以自帶的作用域為準。若內嵌函式包含對外部函式作用域(而非全域性作用域)中變數的引用,那麼該』內嵌函式』就是閉包函式,簡稱閉包(closures)

x=

1def

outer()

: x=

2def

inner()

:print

(x)return inner

func=outer(

)func(

)# 結果為2

可以通過函式的closure屬性,檢視到閉包函式所包裹的外部變數

>>

> func.__closure__

(:int

object at 0x10028cca0

>,)

>>

> func.__closure__[0]

.cell_contents

2

「閉」代表函式是內部的,「包」代表函式外』包裹』著對外層作用域的引用。因而無論在何處呼叫閉包函式,使用的仍然是包裹在其外層的變數。

目前為止,我們得到了兩種為函式體傳值的方式,一種是直接將值以引數的形式傳入,另外一種就是將值包給函式

import requests

#方式一:

defget

(url)

:return requests.get(url)

.text

#方式二:

defpage

(url)

:def

get():

return requests.get(url)

.text

return get

get(

'')get(

'')get(

'')……

python=page(

'')python(

)python(

)python()……

閉包函式的這種特性有時又稱為惰性計算。使用將值包給函式的方式,在接下來的裝飾器中也將大有用處

day16 物件導向

一.物件導向思想 1.面向過程.重點在 過程 按照實物的發展流程.先幹嘛,後幹嘛,最後幹嘛.優點 簡單.流水線式的工作 缺點 可擴充套件性差.2.物件導向.什麼是物件?物件是屬性和動作的集合體.物件是乙個抽象的概念.重點在 物件 屬性和動作.類似上帝式的思維 優點 可擴充套件性強 多型 缺點 編寫相...

day16 高階函式

匿名函式 高階函式 滿足倆個特性任意乙個即為高階函式 1.函式的傳入引數是乙個函式名 2.函式的返回值是乙個函式名 map num l 1,2,10,5,3,7 lambda x x 1 def add one x return x 1 lambda x x 1 def reduce one x r...

day16 匿名函式

匿名函式 函式名 lambda 引數1,引數2,返回值 注意 匿名函式不允許換行 匿名函式返回值和正常函式一樣可以是任意資料型別 def add x,y return x y add lambda x,y x y print add 3,6 dic def func num return dic n...