Python學習筆記day17 無參裝飾器

2021-10-06 05:58:28 字數 2302 閱讀 5431

*與**都可以用在形參中,用在形參中他們是彙總的意思。

*是把多餘的位置實參給彙總成元組的形式,賦值給args

*與**在是實參中,打散(彙總與打散互為逆過程)

舉例說明:

def index(*args,a=1,b=1):

print(*args,a,b)

index(*args,**kwargs) #將args打散 index(*(1,2,3,4,5),**) 打散成index(1,2,3,4,5,a=1,b=2)

命名空間的「巢狀」關係是在函式定義階段,即檢測語法的時候確定的

巢狀關係決定了找名字的時候,是在當前位置找,沒有去外層找,再沒有再去外層找,再沒有再去外層找......

函式物件:可以將函式當做變數去用,可以賦值、可以當做引數傳入,可以當做返回值返回,可以當做容器型別的元素

在這裡將用到,把函式當做引數傳入,不要加括號,傳入函式的記憶體位址

把函式當做返回值,不要加括號,返回函式的記憶體位址

例如:def index(x):

print(x)

def foo(func):

return func

c = foo(index) #將函式作為引數傳入時,不加括號,傳入的是函式的記憶體位址

c(2)

在乙個函式內,可以再包乙個函式

例如:def outter():

pass

閉函式:表示它在乙個函式內定義的函式

包函式:表示它訪問的乙個變數不是在它定義的範圍內,而是引用外層的變數

滿足兩者稱為閉包函式

補充:如果開始是全域性範圍下的函式,將他閉包後,如何讓他回到全域性的地位上呢?

方法:return 函式名

舉例:開始的warpper

def warpper():

print(x)

成為閉包函式的warpper

def outter():

x = 111

def warrper():

print(x)

return warrper

warrper = outter() #此時的warrper已經不是原來的warrper,現在的warrper是在outter定義的空間內,之前的warpper是在全域性。當函式內的名字被其他作用域所引用著時,那麼這個函式的記憶體空間不會被釋放(**)。

warrper()

print(x)

def outter(x):

print(x)

器指的是工具,可以定義成函式

裝飾指的是為其他事物新增額外的東西點綴

合到一起的解釋:

裝飾器指的的定義乙個函式,該函式是用來為其他函式的新增額外功能

開放封閉原則 

開放:指的是對擴充套件功能是開放的

封閉:指的是對修改源**是封閉的

滿足開放封閉原則,在不修改源**的情況下拓展函式的功能

現實情況中在不修改原始功能的情況下拓展功能,最好不要修改源**

裝飾器就是在==不修改被裝飾器物件源**以及呼叫方式==的前提下,為被裝飾物件新增新功能

舉例: 需求在不修改index函式的源**以及呼叫方式的前提下為其新增統計執行時間的功能

import time

def index(x,y):

time.sleep(3)

print('index %s %s' % (x,y))

index(111,222)

無參裝飾器:

def timmer(func):

start = time.time()

res = func(*args,**kwargs)

stop = time.time()

print('執行時間為:%f' %stop - start)

return res

補充:==語法糖==:在被裝飾物件正上方單獨一行寫@裝飾器名字即可

@timmer

def index(x,y):

time.sleep(3)

print('index %s %s' % (x,y))

index(111,222)

==總結無參裝飾器模板==

def outter(func):

#1、呼叫原函式

#2、增加新功能

res = func(*args,**kwargs)#引數要寫活

return res

python學習筆記 day17 初識遞迴

從前有座山,山上有座廟,廟裡有個老和尚,老和尚再給小和尚講故事 從前有座山,山上有座廟.這其實就是乙個遞迴的例子,只不過這是只遞不歸,再比如這段 def story print 從前有座山 story story 呼叫story 會不斷地執行裡面的 不斷又呼叫story 我們都知道當呼叫函式的時候,...

day17學習筆記(物件導向)

1 類屬性 定義在類中的變數 類屬性的值不會因為物件的不同而不同 2 物件屬性 通過 self.屬性名 值 定義在 init 函式中的屬性 物件屬性的值會因為物件不同而不同 物件.屬性 獲取物件指定屬性的值 getattr 物件,屬性名 獲取物件指定屬性的值 getattr 物件,屬性名,預設值 獲...

力扣學習筆記day17

編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列 使用 o 1 的額外空間解決這一問題。你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。eg 輸入 h e l l o 輸出 o l l e h...