我正在看一些使用@符号的 Python 代码,但我不知道它的作用。我也不知道要搜索什么,因为搜索 Python 文档时会出现,或者当包含@符号时 Google 不会返回相关结果。
class Pizza(object):
    def __init__(self):
        self.toppings = []
    def __call__(self, topping):
        # When using '@instance_of_pizza' before a function definition
        # the function gets passed onto 'topping'.
        self.toppings.append(topping())
    def __repr__(self):
        return str(self.toppings)
pizza = Pizza()
@pizza
def cheese():
    return 'cheese'
@pizza
def sauce():
    return 'sauce'
print pizza
# ['cheese', 'sauce']这表明在修饰符之后定义function / method / class基本上只是在@符号argument传递给function / method
微框架Flask从一开始就以以下格式引入装饰器:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"依次将其翻译为:
rule      = "/"
view_func = hello
# They go as arguments here in 'flask/app.py'
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
    pass终于意识到了这一点,使我与 Flask 和平相处。
此代码段:
def decorator(func):
   return func
@decorator
def some_func():
    pass等效于以下代码:
def decorator(func):
    return func
def some_func():
    pass
some_func = decorator(some_func)在装饰器的定义中,您可以添加一些通常不会由函数返回的修改内容。