方法你了解多少,不夠清晰的話後面裝飾器可能會糊塗
方法基本模板:
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 函式將在...