python基礎之被忽視的知識點1
-
裝飾器的使用
閉包函數:
python是一種面向對象的編程語言,在python中一切皆對象,這樣就使得變量所擁有的屬性,函數也同樣擁有。這樣我們就可以理解在函數內創建一個函數的行爲是完全合法的。這種函數被叫做內嵌函數,這種函數只可以在外部函數的作用域內被正常調用,在外部函數的作用域之外調用會報錯;而如果內部函數裏引用了外部函數裏定義的對象(甚至是外層之外,但不是全局變量),那麼此時內部函數就被稱爲閉包函數閉包實例:
def count(): a = 1 b = 1 def sum(): c = 1 return a + c # a - 自由變量 return sum
概念:
python裝飾器本質上就是一個函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外的功能,裝飾器的返回值也是一個函數對象;裝飾器函數的外部函數傳入我要裝飾的函數名字,返回經過修飾後函數的名字;內層函數(閉包)負責修飾被裝飾函數重點:
實質: 是一個函數 參數:是你要裝飾的函數名(並非函數調用) 返回:是裝飾完的函數名(也非函數調用) 作用:爲已經存在的對象添加額外的功能 特點:不需要對對象做任何的代碼上的變動
作用:
它經常用於有切面需求的場景,比如:插入日誌、性能測試、事務處理、緩存、權限校驗等場景。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函數功能本身無關的雷同代碼並繼續重用實例1-函數裝飾器:
# 裝飾器 def Decorator(func): #這個就是一個閉包函數,在這裏面做一些你想做的事情,並不影響其他功能 def bibao(): #在閉包函數中對要裝飾的函數進行調用 func() print("2019年4月1日,用戶訪問了該站點") # 這句話其實就是裝飾器增加的內容,增加了操作後的訪問記錄 return bibao #需要裝飾的函數 def login(): #比如登錄,跳轉頁面等操作 print("我登錄上了" ) pass #函數被裝飾 login=Decorator(login) # #調用查看效果 login()
這個簡易的裝飾器就可以給任何一個操作進行訪問記錄的添加,節省很多時間和精力