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_namedef func():
return("FUNCTION IS RUNNING")
can_run=True
print(func())
上面是我从某个材料中看到的装饰器的代码,运行后会输出“FUNCTION IS RUNNING”。
我不理解的地方在于我标注出的装饰器中的三个 return 语句:
当 can_run 是 False 时,会执行第一个 return ;
否则当 can_run 是 True 时,会执行第二个 return 。
上面两种情况已经涵盖了所有的情形了,那么第三个 return 岂不是永远不会被执行到?
所以我感觉上面的代码写法是不合适的,应该把多余的第三个 return 语句去掉? 但是感觉去掉第三个语句,又不是装饰器的规范写法了。
百思不得其解,恳请大家指点,感谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/684015
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.