python - Python 装饰器 - 为什么?
问题描述
我正在学习 Python,并且正在学习装饰器。
我试图理解为什么会使用它们。
如果我编写一个非常简单的装饰器,
def new_func(inserted_func):
def wrap_func():
print("Start")
inserted_func()
print("End")
return wrap_func
@new_func
def existing_func():
print("Middle")
existing_func()
它会回来,
Start
Middle
End
但我也可以通过编码来达到同样的效果,
def func1():
print("Start")
def func2():
print("Middle")
def func3():
print("End")
func1()
func2()
func3()
现在我很欣赏我的装饰器功能非常简单,但是,除了“因为你可以”之外,选择装饰器而不是多个功能的原因是什么?
解决方案
您的装饰器示例很可能是您对自己思考“为什么,我知道为什么!?”的原因。
但请看一下,例如用于路由的闪存解决方案(教程:https ://medium.com/python-pandemonium/build-simple-restful-api-with-python-and-flask-part-1-fae9ff66a706 )
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
这里的装饰器帮了你一个大忙,让你只需创建代码,而无需手动输入 @app.route() 装饰器中的任何内容。
还记得干吗?装饰器是在许多地方重用代码的简单方法。同样,路由示例允许您在整个项目中使用具有不同参数的一个装饰器,并且一切正常。
推荐阅读
- angular - 无法呈现 ng-new 应用程序的正确结果
- c# - 如何在 CollectionView 项目中添加图库中的照片?
- sql - 如何在没有 MERGE 语句的情况下执行 Update else Insert 操作 win INFORMIX
- java - 在 kotlin Android Studio 中声明 ImageView
- kubernetes-ingress - Kuberntes 入口和客户端身份验证应用程序
- java - Android从uri打开文件输入流
- r - 将独立截距/斜率混合模型公式转换为数学公式
- python - 意大利语维基百科上的 Word2Vec 模型
- git - 尝试添加 CANopenNode 库但出现错误
- android-studio - Gradle:viewBinding的参数太多