*函數的定義以及調用:
def 函數名(形參) :
函數體
return 返回值
*調用 函數名(實參)
關於 形參 : 位置參數,*args, 默認參數(陷阱問題),**kwargs
關於 實參: 按照位置傳、按照關鍵字傳
#默認參數 陷阱 : 函数中的参数默认值是一个可变的list, 函数体内修改了原来的默认值,而python会将修改后的值一直保留,并作为下次函数调用时的参数默认值
*返回值 : 沒有返回值、返回一個值、返回多個值
返回值的接收方法: 沒有返回值 >>>不接收
返回一個值 >>>用一個變量接收
返回多個值 >>>用一個變量接收或是對應的數目變量接收
*閉包函數 在內部函數引用外部函數的變量
*裝飾器
裝飾器的作用: 再不改變原來的函數的調用方式的情況下,在這個函數的前後添加新的 功能。
完美的符合了一個開發原則 : 開放封閉原則
1.對擴展的是開放的
2.對修改的是封閉的
1.基礎的裝飾器
#基礎的裝飾器def wrapper(func): def inner(*args,**kwargs): ''' 在函數被調用之前添加的代碼''' ret = func(*args,**kwargs) #func 是被裝飾的函數 在這裡被調用 '''在函數被調用之後添加的代碼''' return ret return input#使用 -- @wrapper
2.完美的裝飾器
from functools import wraps
#完美的裝飾器from functools import wraps def wrapper(func): def inner(*args,**kwargs): ''' 在函數被調用之前添加的代碼''' ret = func(*args,**kwargs) #func 是被裝飾的函數 在這裡被調用 '''在函數被調用之後添加的代碼''' return ret return input#使用 -- @wrapper
3.帶參數的裝飾器
.@wrapper >>@warapper(argument)
.三層嵌套函數
#三層嵌套裝飾器.帶參數裝飾器
def outer(形參): def wrapper(func): def inner(*args,**kwargs): ''' 在函數被調用之前添加的代碼''' ret = func(*args,**kwargs) #func 是被裝飾的函數 在這裡被調用 '''在函數被調用之後添加的代碼''' return ret return input return wrapper @outer(True) def func(): pass
4.多個裝飾器裝飾一個函數
俄羅斯娃娃
def wrapper1(func): @wraps(func) def inner(*args,**kwargs): print('before 1') print('******') ret = func(*args,**kwargs) # func是被装饰的函数 在这里被调用 '''在函数被调用之后添加的代码''' return ret def wrapper2(func): @wraps(func) def inner(*args,**kwargs): print('before 2') ret = func(*args,**kwargs) # func是被装饰的函数 在这里被调用 '''在函数被调用之后添加的代码''' return ret @wrapper1 @wrapper2 def func(): print('111')
沒有留言:
張貼留言