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

下面的代码是在网络上找到的东西的一个片段.我感兴趣的关键是以@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相关问答推荐

使用Polars阅读按日期键分区的最新S3镶木地板文件

TypeError:&Quot;Value&Quot;参数必须是标量、Dict或Series,但您传递了&Quot;Index&Quot;

如何从枚举中获取某个值?

检测点坐标 - opencv findContours()

pip install saxonche v 12.1.0 产生 FileNotFoundError

获取字符串中的两个工作日之间的差异

使用 GEKKO 使用代码解决最佳时间控制问题时出现 IndexError

为什么 Sympy 不能解决我的非线性系统? Python 解释器一直在执行,直到我终止进程

在python中将字符串写入文本文件

有没有办法使用重采样矢量化添加缺失的月份?

Dask 多阶段资源设置导致 Failed to Serialize 错误

具有 2 个输入的 python 3 map/lambda 方法

python中是否有大于但小于函数?

Python:遍历子列表

创建日志(log)文件

为什么 string.maketrans 在 Python 3.1 中不起作用?

带有自定义标头的 urllib.urlretrieve

什么是ANSI_X3.4-1968编码?

为什么异步库比这个 I/O 绑定操作的线程慢?

如何更改 tkinter 文本小部件中某些单词的 colored颜色 ?