python學習 裝飾器的使用

2021-08-19 10:14:49 字數 1968 閱讀 3444

import  time

username = "jinxinxin"

password = "abc123"

#裝飾器

def authentication(authen_way):

def decorator(func):

def timer(*args,**kwargs):

name = input("請輸入您的使用者名稱:").strip()

pwd = input("請輸入您的密碼:").strip()

if(authen_way=="local"):

if(name==username)and(pwd==password):

print("您已登入成功")

res = func(*args,**kwargs)

return res

else:

print("笨蛋,賬號或密碼輸入錯誤!")

elif(authen_way=="ldap"):

print("ldap什麼鬼,我還沒學呢")

return timer

return decorator

def index():

print("歡迎來到**首頁")

@authentication(authen_way="local")

def login(*args,**kwargs):

print("這是使用者登入介面")

return ("i love you")

@authentication(authen_way="ldap")

def manage(*args,**kwargs):

print("這是後台管理頁面")

index()

print(login())

manage()

這段**的意義是這樣的:

共有三個方法index():首頁頁面

login():使用者登入頁面

manage():後台管理介面

首先,首頁頁面沒有什麼需要裝飾的,直接呼叫就可以了

其次,在使用者認證的方式上,有一種是本地認證,另一種是ldap認證(我也只是聽說,不懂)。現在,要實現的功能是,使用者登入的時候,採用本地認證,後台管理的時候採用ldap認證。然後,無論是login()和manage()都可以會有引數存在,此外,login()方法還會return乙個值。

裝飾器:巢狀函式+高階函式(自行學習)

因此,裝飾器,是一層一層的,各個層之間是有關係有聯絡的

我是這麼考慮的:

1.在展現使用者登入網頁頁面和後台管理網頁頁面之前,我們必須先確定好,它們分別採用了哪種方式的認證(local or ldap),因此,這是第一層,也就是最外面一層

2.在確定好認證方式後,就是將裝飾的函式作為引數傳進去了,這是第二層

3.確定好啟動的函式,之後要對函式自身的引數有所裝飾,所以針對被裝飾函式的引數也會有乙個特定的裝飾函式來傳引數,這是第三層,也就是最裡面一層

最外層第一層:def  authentication(authen_way):確定認證方式

第二層:def decorator(func):將所需裝飾的函式作為引數傳進去,以便最後一層呼叫

第三層:def timer(*args,**kwargs):傳遞所需裝飾函式自身的引數 並且一些具體函式呼叫,功能實現,都在最裡層實現。

注:因為函式login()return了乙個值,所以在裝飾器裡,不能僅僅func(),還要將func()中return的值return出來,

所以將func()傳遞給res變數,res=func(),再return res就可以了。

且裝飾器為巢狀函式+高階函式,還需要再return timer和return decorator~

之前知乎上看到乙個對裝飾器很形象的解釋:**可以用來遮羞,但是到了冬天沒有辦法保暖禦寒,所以聰明的人發明了長褲,有了長褲後就不怕冷了。長褲就是我們所說的裝飾器,在不影響**遮羞功能的情況下,還能提供保暖禦寒的作用。

python 裝飾器的使用

使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的 上對原函式新增新的功能。1 在原函式中新增乙個裝飾器 原函式 def sayhello print hello,world sayhello 新增裝飾器後 import functools def decorator fun...

python裝飾器的使用

在class內部,可以有屬性和方法,而外部 可以通過直接呼叫例項變數的方法來運算元據,這樣,就隱藏了內部的複雜邏輯。但是,從前面student類的定義來看,外部 還是可以自由地修改乙個例項的name score屬性 如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例...

Python裝飾器的使用

本文介紹的是python裝飾器 的使用,分三部分記錄裝飾器,旨在為之後複習保留學習筆記。python裝飾器在沒有改變原始函式呼叫方式的同時,在原始函式的前後增加功能,滿足開放封閉原則。目錄 1.裝飾器的固定模板 2.帶引數的裝飾器模板 3.多個裝飾器函式裝飾乙個函式 裝飾器的固定模板 def inn...