1. 程式人生 > >第四次記錄!!!Python裝飾器

第四次記錄!!!Python裝飾器

裝飾器並不是什麼新功能,而是一種模式,通過高階函式和巢狀函式來完成的。

當要對一個函式新增新內容時要求1、不能修改到原函式程式碼

               2、不能修改呼叫此函式的呼叫方式

優點:當想對多個網站新增功能時,可以通過裝飾器來新增功能,同而不修改到原始碼。

缺點:有時函式巢狀太多對閱讀者理解加大了難度。

今天完成的程式碼:

 

import  time
user,passwd = 'alex','abc123'
def auth(auth_type):
    print('auth func:',auth_type)
    def outer_wrapper(func):
        def wrapper(*args, **kwargs):
            print("wrapper func args:", *args, **kwargs)
            if auth_type == "local":
                username = input("Username:").strip()
                password = input("Password:").strip()
                if user == username and passwd == password:
                    print("登入成功")
                    return func(*args, **kwargs)    # from home
                else:
                    exit("登陸失敗")
            elif auth_type == "ldap":
                print("搞毛線,不會。。。。")
        return wrapper
    return outer_wrapper

def index():
    print("welcome to index page")

@auth(auth_type="local") # home = wrapper()
def home():
    print("welcome to home page")
    return "from home"

@auth(auth_type="ldap")
def bbs():
    print("welcome to bbs page")

print(home())
bbs()