python函式物件和閉包函式

2022-09-11 16:12:34 字數 1916 閱讀 8864

函式物件:

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

函式可以被引用:

>>> def

add(x,y):

...

return x+y

...

>>> func=add

>>> func(1,2)

3

函式可以作為容器型別的元素:

>>> dic=

>>>dic

>>> dic['

add'](1,2)

3

函式可以作為引數傳入另外乙個函式:

>>> def

foo(x,y,func):

...

return

func(x,y)

...>>> foo(1,2,add)

3

函式的返回值可以是乙個函式:

def

bar():

return

add

func=bar()

func(1,2)

3

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

x=1

deff1():

deff2():

print

(x)

return

f2def

f3():

x=3f2=f1() #

呼叫f1()返回函式f2

f2() #

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

f3()

#結果為1

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

x=1

defouter():

x=2def

inner():

print

(x)

return

inner

func=outer()

func()

#結果為2

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

>>> func.__closure__(,)

>>> func.__closure__

[0].cell_contents

2

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

閉包的用途

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

import

requests

#方式一:

defget(url):

return

requests.get(url).text

#方式二:

defpage(url):

defget():

return

requests.get(url).text

return get

#

get('

')get(

'')get(

'')……#

python=page('

')python()

python()

python()

……

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

python 閉包函式 python函式物件和閉包

一 函式物件 函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,我們如下 1.1 函式可以被引用 def add x,y return x y func add func 1,2 1.2 函式可以作為容器型別的元素 dic dicdic add 1.3 函式可以作為引數傳入另外...

函式物件和閉包

1.引用 func f1 print f1 f1 print func func func 2.當作容器類元素 lt f1,1,2,3 print lt 0 lt 0 print f1 f1 lt 0 3.當作函式引數 def f2 f2 f1 print f2 f1 f2 f1 f2 f1 f2 ...

12 函式物件和閉包函式

1 可以被賦值 func 記憶體位址 deffunc print from func f func 2 可以當成變數 deffunc return 3def foo x print x foo func 記憶體位址 3 可以當成返回值 deffunc return 3def foo x return...