python 閉包,裝飾器 裝飾者模式

2021-10-09 00:04:27 字數 2844 閱讀 8500

# 函式閉包

deffun1

(c):

a =10 b =

20print

(c)print

("我是fun1"

)def

fun2

(fun)

: a =

"a" c =

"c"def

fun3()

: fun(c)

print

("我是fun3"

)print

("我是fun2"

)return fun3

funx = fun2(fun1)

# 我是fun2 這裡通過fun2讓fun1可以訪問到fun2的變數,並進行了功能的擴充套件,這樣的乙個函式我們就稱之為閉包

"""閉包形成條件

1.乙個就收函式作為變數的函式

2.在這個函式裡有第三個函式

3.在這個第三個函式裡呼叫傳進來的函式

4.將這個新的函式作為返回值進行返回

"""print

("="*20

)funx(

)# 呼叫這個新生成的函式

"""c

我是fun1

我是fun3

"""

# 函式閉包

deffun1

(c):

a =10 b =

20print

(c)print

("我是fun1"

)def

fun2

(fun)

: a =

"a" c =

"c"def

fun3()

: fun(c)

print

("我是fun3"

)print

("我是fun2"

)return fun3

funx = fun2(fun1)

# 我是fun2 這裡通過fun2讓fun1可以訪問到fun2的變數,並進行了功能的擴充套件,這樣的乙個函式我們就稱之為閉包

"""閉包形成條件

1.乙個就收函式作為變數的函式

2.在這個函式裡有第三個函式

3.在這個第三個函式裡呼叫傳進來的函式

4.將這個新的函式作為返回值進行返回

"""print

("="*20

)funx(

)# 呼叫這個新生成的函式

"""c

我是fun1

我是fun3

""""""

裝飾器的使用必須要有乙個閉包

"""print

("="*30

)@fun2 # 這個就是裝飾器 @閉包的形式掛在在函式、方法或者類上,裝飾器的個數是不受限制的

deffun4

(c):

print

("我是fun4"

)fun4(

)

from time import time

from math import sqrt

deftimer

(fun)

:def

newfun()

: start = time(

) fun(

)print

("這個函式執行了%.2f秒"

%(time(

)- start)

)return newfun

# 作為演示這裡寫了幾種不同的求10000以內質數的函式

@timer

deffun1()

:# 暴力迭代法

for i in

range(2

,10000):

if i ==2:

print

(i)continue

for j in

range(2

, i)

:if i % j ==0:

break

if j == i -1:

print

(i)@timer

deffun2()

:# 最小因數法

for i in

range(2

,10000):

if i ==

2or i ==3:

print

(i)continue

count =

2while count < sqrt(i)

:if i % count ==0:

break

if count +

1> sqrt(i)

:print

(i) count +=

1@timer

deffun3()

:# 二分法

for i in

range(2

,10000):

if i ==

2or i ==3:

print

(i)continue

count =

2while count < i/2:

if i % count ==0:

break

if count +

1> i/2:

print

(i) count +=

1fun1(

)# 這個函式執行了0.61秒

fun2(

)# 這個函式執行了0.05秒

fun3(

)# 這個函式執行了0.79秒 , 事實證明while迴圈跑不贏迭代

Python閉包 裝飾器

閉包 legb法則 所謂閉包,就是將組成函式的語句和這些語句的執行環境打包一起時得到的物件 閉包最重要的價值在於封裝上下文環境 下面有個列子來解釋下閉包 列 deffunx x print 開始 deffuny y returnx y print 結束 returnfuny x funx 4 pri...

python 閉包 裝飾器

2.閉包格式 return bar 返回內嵌函式 in test print in 3.使用原理 4.總結 二 裝飾器 2.格式 return test in 閉包函式返回內嵌函式 test aa test aa 裝飾 def aa 這兒如果有引數,test in也必須有一樣的引數,test in中...

閉包 裝飾器

外部函式返回內部函式的引用 內部函式可以直接使用外部函式的環境變數 語法 外部函式通過返回內部函式的引用 內部函式可以直接使用外部函式的 環境變數 自由變數 函式執行時間統計 執行函式前預備處理 執行函式後清理功能 許可權校驗等場景 快取有且只有乙個引數 指向了被裝飾的函式的引用 使用裝飾器 裝飾器...