当前位置: 首页 > 面试题库 >

Python装饰器?-有人可以解释一下吗?

叶俊郎
2023-03-14
问题内容

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

以下代码是网络上某些内容的片段。我感兴趣的关键是从@protected开始的行-
我想知道这是做什么的以及它是如何做到的?在执行do_upload_ajax函数之前,似乎正在检查是否已登录有效用户。这似乎是进行用户身份验证的一种非常有效的方法。我不了解此@函数的机制-
有人可以引导我正确的方向来解释如何在现实世界中实现它吗?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

问题答案:

以一个 _良好的_看看这个巨大的接听/小说。这是我遇到的最好的解释之一。

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

该代码例如:

@decorate
def foo(a):
  print a

如果删除装饰器语法,则等效于以下代码:

def bar(a):
  print a

foo = decorate(bar)

装饰器有时会采用参数,这些参数将传递给动态生成的函数以更改其输出。

您应该阅读的另一个术语是 Closure ,因为它是允许装饰器起作用的概念。



 类似资料:
  • 抱歉,这是一个非常广泛的问题。 下面的代码是在网上找到的东西的片段。我感兴趣的关键是@protected开头的一行——我想知道这是做什么的,它是如何做到的?在执行do_upload_ajax函数之前,它似乎正在检查有效用户是否登录。这看起来是一种非常有效的用户身份验证方法。不过,我不明白这个@函数的机制——有人能告诉我正确的方向,解释一下这将如何在现实世界中实现吗?Python 3请回答。谢谢。

  • 问题内容: 为什么在Python解释器中会发生以下情况? 为什么不呢? 问题答案: 那是因为不能以二进制浮点表示形式精确表示。如果你试试 Python会做出响应,因为它只能打印出一定的精度,但是已经存在一个小的舍入错误。也会发生同样的情况,但是当您发出 然后四舍五入误差并累积。另请注意:

  • 问题内容: 越来越多地使用Python,并且不断看到在不同文件中设置的变量。有人可以解释这是什么吗? 问题答案: 这是该模块的公共对象的列表,由解释import 。它覆盖了默认的内容,即隐藏以下划线开头的所有内容。

  • 问题内容: 我只是在android上开始,而我的java很生锈。我不记得曾经见过像这样嵌套在另一个函数中的函数。有人可以向我确切解释final的作用,并解释为什么您要在另一个函数中嵌套这样的功能吗? 问题答案: 这是一个匿名类。实际发生的情况是正在使用重写的函数创建 的子类。 关于匿名类的最优雅的事情之一是,它们使您可以在需要的地方准确定义单发类。此外,匿名类具有简洁的语法,可减少代码中的混乱情况

  • 问题内容: 需要使用一对多和多对一关系。这是我对象中的双向关系,因此我可以从任一方向来回移动。是推荐的解决方法,但是,我听不懂。有人可以解释: 推荐的使用方式是什么? 它解决什么目的? 就我的示例而言,这是带有注释的类: 拥有许多 许多 属于一个 A 航空公司: 航空公司航班: 编辑: 数据库模式: AirlineFlights具有idAirline作为ForeignKey,而Airline没有i

  • 问题内容: 我目前正在学习node.js,但我只是好奇这意味着什么,所以我正在学习,您能否告诉我为什么这段代码可以做到: 我知道它会将您添加到命令行的数字相加,但是为什么“ i”以2开头?我了解for循环,因此您不必对此进行详细介绍。 提前非常感谢您。 问题答案: 您可以用解决此问题。 它从2开始,因为它包含整个命令行调用: 元素和不是您所谓的“参数”,但它们确实存在。