python装饰器学习
生活随笔
收集整理的這篇文章主要介紹了
python装饰器学习
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
裝飾器
要學(xué)會(huì)裝飾器,必須首先知道什么是閉包.
閉包:
- 在函數(shù)中提出的概念
- 就是內(nèi)層函數(shù)對(duì)外層函數(shù)(非全局變量的運(yùn)用)并且返回值是內(nèi)部函數(shù)的引用.
- 格式:
- def 外部函數(shù):def內(nèi)部函數(shù):return 內(nèi)部函數(shù)
- 案例:
def func(a,b):c = 10def innerfunc():s = a+b+creturn innerfunc調(diào)用funcinner = func(5,8)這是可以調(diào)用內(nèi)部函數(shù):inner() - 重點(diǎn)在于理解內(nèi)部函數(shù)的調(diào)用: - 不可以直接調(diào)用,只是要有一個(gè)變量去接這個(gè)函數(shù)才可以調(diào)用 - 函數(shù)是可以作為參數(shù)和變量的,完成該賦值過(guò)程,實(shí)際上就是指針的概念
裝飾器
裝飾器的特點(diǎn):
- 函數(shù)作為函數(shù)使用(函數(shù)a作為參數(shù)出現(xiàn),函數(shù)b就接收函數(shù)a作為參數(shù))
- 要有閉包的特點(diǎn)
- 裝飾器在不改變?cè)瘮?shù)的情況下.
具體的實(shí)例:
def decorator(func):print('買一個(gè)毛絨玩具')def warrper():func()print('包裝一個(gè)漂亮的包裝紙!')print('系上一個(gè)漂亮的蝴蝶結(jié)!')return warrper@decoratordef gift():print('送給朋友一個(gè)禮物')gift()
一旦給某個(gè)函數(shù)添加裝飾器裝飾器做的動(dòng)作:
- 將被裝飾的函數(shù)作為參數(shù)傳遞給裝飾器(gift作為參數(shù)傳遞給decorator.)
- 并且執(zhí)行decorator.
- 將返回值扔出,并且把值賦值給gift函數(shù)(warrper賦值給gift)
登錄裝飾器實(shí)例代碼:
import timeislogin=0def login():username = input('請(qǐng)輸入你的用戶名:')password = input('請(qǐng)輸入你的密碼:')if username == 'admin' and password == '123456':print('登錄成功!!!')islogin = Trueelse:print('登錄失敗!!!')islogin = Falsereturn islogindef verify_login(func):def warrep():if islogin:func()print('商品的總價(jià)格是100元')else:print('用戶還沒(méi)有登錄,請(qǐng)趕快登錄吧')f=login()if f:func()return warrep@verify_logindef pay():print('您正在付款....')time.sleep(2)print('付款成功')pay()
總結(jié)
以上是生活随笔為你收集整理的python装饰器学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 二进制与十进制
- 下一篇: mybatis的资源过滤错误及xml文件