我熟悉Python的装饰器的基础知识。然而,我不明白这个用于烧瓶路线的特定装饰器是如何工作的
以下是Flask网站上的代码片段:
from flask import Flask, escape, request
app = Flask(__name__)
@app.route('/')
def hello():
name = request.args.get("name", "World")
return f'Hello, {escape(name)}!'
.route('/')
是让我困惑的部分。我看到decorators的使用方式是decorator注释通常是一个函数,它接受一个参数,即decorator函数本身,然后可以在decorator内部执行。但这里似乎有所不同
多谢各位
更新:感谢您在我的第二段代码中提供关于self
的提示。作为Python新手,我完全忘记了something
的第一个参数必须是self
。乍一看,我不认为这个例子有助于澄清这个问题,因此我把它删除了
听起来你有一些误解,我们希望能澄清。首先,decorator只是一个术语(和一些语言“sugar”,即
@decorator
语法),表示接受一个可调用项并返回另一个可调用项的可调用项。这个可调用函数可以是一个函数(例如def foo(func)
),也可以是一个方法(例如obj.method(func)
),它只需要是一个接受可调用函数并返回可调用函数的东西在Flask的
@app.route
装饰器中,您正在将hello
函数传递给对象的(我认为是flask.Flask
对象的^{)route
方法。反过来,当Flask应用程序被告知开始服务请求时,它会将您的函数及其相关配置添加到自己的“内存”中进行路由其次,您的示例具有
def something(arg1, arg2):
调用时传递给对象方法的第一个参数是对象实例,通常称为self
这篇Primer on Python Decorators文章可能是一个很好的开始阅读他们如何/为什么以这种方式工作的地方
装饰器只是一个函数,它接受一个函数作为参数并返回另一个函数。接受参数的decorator(比如flask的
route
decorator)必须返回一个可以用作简单decorator的函数例如,我们可以这样编写
route
装饰器:调用
route('/')
返回一个以函数为参数的函数,该函数使用传递给外部函数的path
值和内部函数接收的func
值更新全局routes
变量如果我们在几个函数上使用它:
然后我们可以检查
routes
变量,并看到它现在将路径映射到适当的函数。运行:产生类似于:
相关问题 更多 >
编程相关推荐