首页 > 解决方案 > 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()

现在我很欣赏我的装饰器功能非常简单,但是,除了“因为你可以”之外,选择装饰器而不是多个功能的原因是什么?

标签: pythonpython-decorators

解决方案


您的装饰器示例很可能是您对自己思考“为什么,我知道为什么!?”的原因。

但请看一下,例如用于路由的闪存解决方案(教程: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() 装饰器中的任何内容。

还记得干吗?装饰器是在许多地方重用代码的简单方法。同样,路由示例允许您在整个项目中使用具有不同参数的一个装饰器,并且一切正常。


推荐阅读