二 閉包函式
函式物件指的是函式可以被當做』資料』來處理,具體可以分為四個方面的使用,我們如下
>>
>
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...