python函式物件和閉包小談

2021-10-05 02:29:31 字數 2092 閱讀 6012

一,函式物件**

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

1.1函式可以被引用

>>

>

defadd

(x,y):.

..return x+y..

.>>

> func=add

>>

> func(1,

2)3

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

>>

> dic=

>>

> dic

>>

> dic[

'add'](

1,2)

3

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

>>

>

deffoo

(x,y,func):.

..return func(x,y)..

.>>

> foo(1,

2,add)

3

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

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

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

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

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

2.2閉包的用途

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

import requests

#方式一:

defget

(url)

:return requests.get(url)

.text

#方式二:

defpage

(url)

:def

get():

return requests.get(url)

.text

get(

'')get(

'')get(

'')……

python=page(

'')python(

)python(

)python(

)……

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

python函式物件和閉包函式

函式物件 函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,我們如下 函式可以被引用 def add x,y return x y func add func 1,2 3 函式可以作為容器型別的元素 dic dic dic add 1,2 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 ...

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

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