裝飾器:四,閉包:一, 例如:
#vim yue7.py
deffoo():
print ("
fool-------------------")
foo()
執行:[root@localhost python]
#python yue7.py
fool-------------------二,要求:要在上述函式不改變函式呼叫方式的情況下增加**執行的時間。
#yue6.py
import
time
defshow_time(f):
def inner(): #
條件1:內部函式;
start =time.time()
f()
#條件2:對外部環境的引用 foo()
end =time.time()
print ("
spend --%s s ---
" %(end-start))
return
inner
deffoo():
print ("
fool-------------------")
time.sleep(2)
foo = show_time(foo) #
.inner at 0x7f1686630488> (此時的foo只是乙個記憶體位址)
foo()
執行結果:
[root@localhost python]
#python yue6.py
fool-------------------spend --2.0029256343841553 s ---三,對上面的**進行改進,用裝飾器修飾。
#vim yue5.py
import
time
defshow_time(f):
definner():
start =time.time()
f()end =time.time()
print ("
spend --%s s ---
" %(end-start))
return
inner
@show_time
#foo = show_time(foo)(裝飾器)
deffoo():
print ("
fool-------------------")
time.sleep(2)
foo() #呼叫
執行結果:
[root@localhost python]
#python yue5.py
fool-------------------spend --2.00250244140625 s ---
#vim yue4.py
defouter():
x = 10
def inner(): #
條件1: inner是內部函式,相對於outer函式來說;
print (x) #
條件2:print(x)是對外部環境變數x=10的引用;
return
inner
#outer()()
f =outer()
f()[root@localhost python]
#python yue4.py
10結論:內部函式inner就是乙個閉包。
python之閉包和裝飾器
閉包函式必須滿足兩個條件 1.函式內部定義的函式 2.包含對外部作用域而非全域性作用域的引用 如下閉包函式 def callfunc n 1 def show print show n return show s callfunc s 程式在執行時,callfunc 函式返回了內部定義的 show ...
python之裝飾器和閉包
在了解裝飾器之前,我們先來了解一下閉包,因為裝飾器的本質也是閉包。閉包 乙個函式定義中引用了函式外定義的變數,並且該函式可以在其定義環境外被執行,這樣乙個函式稱之為閉包。概念比較抽象,我們直接看 def outer func loc list def inner func name print lo...
python裝飾器和閉包
下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...