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