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