裝飾器之基本方法

2021-08-08 11:52:40 字數 1726 閱讀 9842

方法你了解多少,不夠清晰的話後面裝飾器可能會糊塗

方法基本模板:

def function_name(parameters...):

todo

return obj

元件講解:

def:這個是python方法定義的關鍵字,實在說不了啥

function_name:自定義方法名,和物件一樣隨便定義,但是函式名不能隨便當做變數名使用,真的會覆蓋的

def test():

print('test')

test() #test

print(test) #test = 3

print(test) #3

parameters:引數傳入,沒有個數的限制,看情況自定義,變參函式的話後續有乙個篇幅進行詳細討論

預設引數,不用特殊設定,也可以為引數設定預設值

但是設定預設值的形參宣告需要靠後,先宣告無預設值形參,交錯宣告會出錯,也不是個好習慣

方法呼叫需要傳參,設定預設值的引數可以不用傳參,會直接使用預設值進行操作,有傳入值直接使用傳入值操作 

def test(a,b=1,c=2):

print('a={}\tb={}\tc={}'.format(a,b,c))

test(0) # a=0 b=1 c=2

test(0,5) # a=0 b=5 c=2

test(0,5,9) # a=0 b=5 c=9

todo:**邏輯,利用括號中形參進行操作,也可以不使用,但是不能使用未宣告的變數

def test(a,b=1,c=2):

print('就是不用引數')

return  obj:返回指定物件obj,不寫或直接寫return,預設返回none

def test():

return

print(test()) #none

def test():

pass

print(test()) #none

def test():

return 3

print(test()) #3

方法也是物件,也可以返回乙個方法
def test():

print('test')

def inner():

print('inner')

return inner

a = test() #test

a() #inner

方法物件理解:方法可以看做是乙個物件,它是方法類function的乙個物件

它後面定義的方法體可以看做是重寫了function類中的__call__方法,因此括號進行呼叫的時候會執行此方法

def test():

pass

print(test) #

方法物件的用法:

呼叫:直接用方法名稱,可以進行賦值操作,賦值給其他變數,其他變數也會引用這個物件,為方法名賦值的話就會替換覆蓋方法體,就是個簡單物件

執行:加上括號的話,就會執行定義的**塊,成為乙個比較特殊的物件(如果你的定義的物件的類沒有實現__call__的話)

所以是物件的呼叫還是函式的執行,有時候容易混淆,牢記區別可以避免很多坑

裝飾器之基本

在學習裝飾器之前,一定要了解乙個開放封閉原則。軟體開發都應該遵循開放封閉原則。為什麼說要對擴充套件是開放的呢?因為軟體開發過程不可能一次性把所有的功能都考慮完全,肯定會有不同的新功能需要不停新增。也就是說需要我們不斷地去擴充套件已經存在 的功能,這是非常正常的情況。那為什麼說對修改是封閉的呢?比如說...

裝飾器之適配裝飾器

可能沒人發現,前面描述的裝飾器受眾面太小了 都是只能知道原函式入參個數的情況下才能編寫裝飾器,所以寫出來的裝飾器都只能針對入參個數的函式使用 不侷限於原函式 def godme fun def godme message print before fun message print after re...

裝飾器常用方法

經典呼叫方法 usr bin env python coding utf 8 by wk import time import random 一 編寫函式,函式執行的時間是隨機的 def my random time func r time random.randint 0,5 print 函式將在...