在符合軟件開發的原則上,給代碼加一些功能。python
軟件開發中的一個原則「開放-封閉」原則,簡單來講,它規定已經實現的功能代碼不容許被修改,但能夠被擴展,即:後端
原程序(假設是一個視頻網站的後端開發工程師)網站
def home(): print("---首頁----") def vip(): print("----vip專區----") def moive(): print("----電影專區----") def TV(): print("----電視劇----")
現想對幾個板塊內容進行收費,只有vip才能觀看相應區域視頻
flag = False def login(func): def inner(): username = "alex" password = "123" global flag if flag == False: name = input("username:") pw = input("password;") if name == username and pw == password: print("welcome %s....."%name) flag = True else: print("Wrong username or password") else: print("User is logged in") if flag: func() return inner def home(): print("---首頁----") @vip # 等同於 vip = login(vip) def vip(): print("----vip專區----") def moive(): print("----電影專區----") def TV(): print("----電視劇----") vip() #inner
flag = False def login(func): def inner(*args,**kwargs): username = "alex" password = "123" global flag if flag == False: name = input("username:") pw = input("password;") if name == username and pw == password: print("welcome %s....."%name) flag = True else: print("Wrong username or password") else: print("User is logged in") if flag: func(*args,**kwargs) return inner def home(): print("---首頁----") @login def vip(style): print("----vip專區----",style) def moive(): print("----電影專區----") def TV(): print("----電視劇----") vip("music") TV()
要容許用戶選擇用qq\weibo\weixin認證blog
flag = False def login(auth_type): def outer(func): def inner(*args,**kwargs): username = "alex" password = "123" global flag if flag == False: name = input("username:") pw = input("password;") if name == username and pw == password: print("welcome %s....."%name) flag = True else: print("Wrong username or password") else: print("User is logged in") if flag: func(*args,**kwargs) return inner return outer def home(): print("---首頁----") @login('wx') def vip(style): print("----vip專區----",style) def moive(): print("----電影專區----") @login('qq') def TV(): print("----電視劇----") vip("music") TV()