from functools import wraps
def decorator_name(f):
@wraps(f)
def decorated(*args,**kwargs):
if not can_run:
return "FUNCTION WILL NOT RUN" #装饰器中第一个 return
return f(*args,**kwargs) #装饰器中第二个 return
return decorated #装饰器中第三个 return
@decorator_name
def func():
return("FUNCTION IS RUNNING")
can_run=True
print(func())
上面是我从某个材料中看到的装饰器的代码,运行后会输出“FUNCTION IS RUNNING”。
我不理解的地方在于我标注出的装饰器中的三个 return 语句:
当 can_run 是 False 时,会执行第一个 return ;
否则当 can_run 是 True 时,会执行第二个 return 。
上面两种情况已经涵盖了所有的情形了,那么第三个 return 岂不是永远不会被执行到?
所以我感觉上面的代码写法是不合适的,应该把多余的第三个 return 语句去掉? 但是感觉去掉第三个语句,又不是装饰器的规范写法了。
百思不得其解,恳请大家指点,感谢!
def decorator_name(f):
@wraps(f)
def decorated(*args,**kwargs):
if not can_run:
return "FUNCTION WILL NOT RUN" #装饰器中第一个 return
return f(*args,**kwargs) #装饰器中第二个 return
return decorated #装饰器中第三个 return
@decorator_name
def func():
return("FUNCTION IS RUNNING")
can_run=True
print(func())
上面是我从某个材料中看到的装饰器的代码,运行后会输出“FUNCTION IS RUNNING”。
我不理解的地方在于我标注出的装饰器中的三个 return 语句:
当 can_run 是 False 时,会执行第一个 return ;
否则当 can_run 是 True 时,会执行第二个 return 。
上面两种情况已经涵盖了所有的情形了,那么第三个 return 岂不是永远不会被执行到?
所以我感觉上面的代码写法是不合适的,应该把多余的第三个 return 语句去掉? 但是感觉去掉第三个语句,又不是装饰器的规范写法了。
百思不得其解,恳请大家指点,感谢!