抱歉,这是一个非常广泛的问题.

下面的代码是在网络上找到的东西的一个片段.我感兴趣的关键是以@protected开头的行——我想知道这是什么,它是如何做到的?它似乎是在执行do_upload_ajax函数之前判断是否有有效用户登录.这看起来是进行用户身份验证的一种非常有效的方法.不过,我不理解这个@function的机制——有人能指导我朝着正确的方向解释一下它在现实世界中是如何实现的吗?请回答Python 3.谢谢

@bottle.route('/ajaxupload', method='POST')
@protected(check_valid_user) 
def do_upload_ajax():
    data = bottle.request.files.get('data')
    if data.file:
        size = 0

推荐答案

看看这个enormous answer/novel.这是我见过的最好的解释之一.

我能给出的最简短的解释是,装饰程序将您的函数包装在另一个返回函数的函数中.

例如,以下代码:

@decorate
def foo(a):
  print a

如果删除decorator语法,则相当于此代码:

def bar(a):
  print a

foo = decorate(bar)

decorator 有时会获取参数,这些参数被传递给动态生成的函数,以改变它们的输出.

正如装饰师所说,这是另一个概念.

Python-3.x相关问答推荐

在 Django 中执行 JSONRenderer.render(serialized_student_data.data) 时遇到问题

将字典列表展平为数据框列

在不使用字符串方法的情况下查找字符串最后一个单词的长度 - Python

如何使用 Selenium by class_name 从大学橄榄球数据中抓取图像 url 列表

列表中的重复数字与列表理解

如何在python中将列表转换为其他格式

是否将dict转换为一个数据帧,每个值都有重复的键?

“警告:scheme.data 的值不匹配”当我try 更新 pip 或安装软件包时

在带有 M1 芯片(基于 ARM 的 Apple Silicon)的 Mac 上安装较早版本的 Python(3.8 之前)失败

如何测试两个字典是否与 python 中的 pytest 相等

如何用一个 for 循环和没有 if 条件来对偶数和奇数求和?

如何在 FastAPI 中的一条路由上捕获任意路径?

ModuleNotFoundError 与 pytest

当字符串周围的引号不匹配时,为什么 Python 不给出任何错误?

使用 Python 将 sigmoid 函数(“S”形曲线)拟合到数据中

如何在不使用 @hydra.main() 的情况下获取 Hydra 配置

“with”语句是否支持类型提示?

try 注释散列变量时,“ABCMeta”对象不可下标

使用 pytest.fixture 返回模拟对象的正确方法

如何在 Python 3 中 .decode('string-escape') ?