标签:ret pre 开放 实现 例子 put 赋值 参数 lob
不改变原有功能代码,不改变原有调用方式,实现调用
第二句话——符合 开放-封闭原则
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()
标签:ret pre 开放 实现 例子 put 赋值 参数 lob
原文地址:http://www.cnblogs.com/fengdao/p/6057544.html