不改变原有功能代码,不改变原有调用方式,实现调用
第二句话——符合 开放-封闭原则
user_status = False def login(func): #定义,并不执行 def inner(*args,**kwargs): #用于传递 func参数 _username = "alex" _password = "abc123" global user_status if user_status == False: username = input("user:") password = input("password:") if username == _username and password == _password: password("welcome login...") user_status = True else: print("wrong username or password") if user_status == True: func(*args,**kwargs) #将参数传递给func return inner #返回inner内存地址,里面包括了func的执行结果和inner的执行结果 def home(): print("--------首页-------") @login #相当于定义America=login(America),装饰器是把原来的函数的内存地址,当成参数传进去,返回的新内存地址,再赋值给原来函数的变量名 def America(): print("--------欧美专区-------") @login def japan(): print("--------日韩专区-------") @login def henan(): print("--------河南专区-------") home() America()
原文:http://www.cnblogs.com/fengdao/p/6057544.html