一,函式物件**
函式物件指的是函式可以被當做』資料『來處理,具體可以分為四個方面的使用,如下:
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 函式可以作為引數傳入另外...