python装饰器,嵌套函数[重复]

2024-04-16

我试图弄清楚为什么在使用装饰器时我需要一个嵌套函数。这是一个例子:

 def func(f):
    def deco(*args, **kwargs):
        return f(*args, **kwargs)
    return deco

@func
def sum(a, b):
    return a+b

print sum(5, 10)

代码有效,一切都很好。但为什么我需要创建嵌套的“deco”函数? 让我们尝试一下没有它:

def func(f):
    return f(*args, **kwargs)

@func
def sum(a, b):
    return a+b

print sum(5, 10)

代码失败。

那么存在三个问题:

  1. 为什么第二个示例不起作用?
  2. 如果我们使用嵌套函数,为什么 args,kwargs 会“神奇地”出现?
  3. 我该怎么做才能使第二个示例正常工作?当然,除了嵌套另一个函数。

  1. 为什么第二个示例不起作用?

    因为您在返回时调用该函数,所以您没有返回函数。

  2. 如果我们使用嵌套函数,为什么 args,kwargs 会“神奇地”出现?

    它们并不神奇地出现,我们正在声明它们,如下所示:

    def deco(*args, **kwargs):
    

    这些是通用的,并且将匹配任何函数签名(参数列表)。你不必打电话给他们args and kwargs,这只是一个约定,你可以称它们为sharon and tracy.

  3. 我该怎么做才能使第二个示例正常工作?当然,除了嵌套另一个函数。

    好吧,你没有说出你期望第二个样本做什么。但我想把它变成一个装饰器:

    def func(f):
        return f
    

    但这并没有做很多事情!

顺便说一句,覆盖现有的 Python 内置函数通常是一个坏主意(sum) - 你必须有一个很好的理由。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python装饰器,嵌套函数[重复] 的相关文章

随机推荐

  • mvn release 使用特定的私钥推送到 git

    我希望有人能帮忙解决这个问题 我正在尝试配置mvn release插件pom xml这样更新的 pom 版本和标签就会作为 git repo 的一部分推送到release prepare 至关重要的是 它需要使用特定用户的ssh私钥 因为最
  • 如何计算 Windows 区域 (HRGN) 的面积(以像素为单位)?

    获取任意 Windows 区域面积的最快方法是什么 我知道我可以枚举边界矩形的所有点并调用PtInRegion 功能但是似乎不是很快 也许你知道一些更快的方法 你打电话时GetRegionData http msdn microsoft c
  • 与其他浏览器中的“-moz-element”等效吗?

    我想创建一个不透明模糊叠加 类似于 Windows Aero 或 iOS7 不幸的是filter blur or filter url svgBlur 属性只能应用于元素 不能应用于其后面的内容 为了解决这个问题 我们需要一个模糊背景的副本
  • dos2unix 不转换 ^M

    我从 Windows 7 上运行的程序将结果导出到文本文件中 并在 Xubuntu 14 04 上复制该文件 在终端中 我跑了dos2unix file txt 这告诉我converting file out mapqtl txt to U
  • 使用 UDF 的 DataFrame 给出任务不可序列化异常

    尝试在数据帧上使用 show 方法 它给出了任务不可序列化异常 我尝试扩展可序列化对象 但错误仍然存 在 object App extends Serializable def main args Array String Unit Log
  • 在android中点击键盘的完成按钮时将数据插入数据库

    我想知道在将数据插入数据库时 按下键盘 完成 按钮时到底应该做什么 我在这里使用多个编辑文本 当谈到最后一个编辑按钮时 我必须将所有数据插入数据库 private static final String CREATE DB TABLE BU
  • opencv VideoCapture.设置灰度?

    我会避免将摄像机拍摄的每一帧转换为cvtColor frame image CV RGB2GRAY 有没有办法设置VideoCapture直接进入灰度 Example VideoCapture cap 0 cap set CV CAP PR
  • 如何获取从标准 UIViewController 中调用的 UIWebView 的 UIScrollView 委托方法?

    所以我只有一个标准的 UIViewController 其中有一个显示 pdf 的 UIWebView 对于应用程序功能 我需要能够响应 UIWebView 的嵌套 UIScrollView 事件 例如scrollViewWillBegin
  • 使用 Hive 自定义输入格式

    Update 好吧 事实证明以下不起作用的原因是因为我使用的是较新版本的InputFormat API import org apache hadoop mapred这是旧的与import org apache hadoop mapredu
  • 跳出选择循环?

    我正在尝试使用select在循环中接收消息或超时信号 如果收到超时信号 则循环应中止 package main import fmt time func main done time After 1 time Millisecond num
  • Android 使用前置摄像头拍照

    这是我第一次使用相机 我已经阅读了很多示例和文档 所以我尝试创建自己的类来使用前置摄像头拍照 这就是我想出的 public class CameraController private Context context private boo
  • 如何使用 Active Support 核心扩展

    我安装了 Active Support 3 0 3 和 Rails 3 0 3 with Ruby 1 8 7 当我尝试使用时1 week ago I get NoMethodError undefined method week for
  • 是否可以针对 noSQL DB 构建复杂的查询

    我一直在研究 noSQL DB 但未能为自己满意地回答这个问题 是否可以针对 noSQL DB 构建复杂的查询 我想知道的查询类型是这样的 select from DB where vara gt x AND varb 2 AND varc
  • 无法添加日期选择器选项?

    我有一个表单 它动态创建一个带有几个表单输入的新行 其中一个输入附有一个日期选择器 我刚刚在这里的帮助下成功完成了这项工作 除了还剩下一个问题 当我想向日期选择器添加选项时 它就会停止工作 工作小提琴 http jsfiddle net H
  • 无法使字段“属性”可访问;更改其可见性或为其声明类型 gSON fromJson 编写自定义 TypeAdapter

    我有一个名为游戏的课程 public class Game private String name private int id private GameFields gameFields Expose deserialize false
  • Clang 标志的完整列表

    在哪里可以找到 Clang 标志的完整列表 有一些 比如 include pch 这似乎没有在手册页中列出 我知道 GCC 使用一些相同的标志 但它不包括类似的文档 Os我相信这仅在 Clang 中可用 是否有地方可以找到所有 Clang
  • 使用 R 中的 drc 包回归​​多个剂量反应曲线

    我试图通过我的实验数据拟合回归 4 或 5 PL 我有几种化合物可以抑制我感兴趣的酶 每个都有其自己的 0 100 酶活性范围 所有数据都在一个数据框中 并通过指定我的化合物 毒素 的一列进行区分 因此 我想对每种毒素 化合物分别进行回归
  • VS2015:应用程序无法正确启动(0xc000007b)

    我在 Visual Studio 2015 上为 Windows 10 PC 编写了代码 该应用程序主要关注 UDP 通信 我使用 boost 库 它工作正常 但当我将代码文件夹移至 Windows 7 时 我收到错误 应用程序无法正确启动
  • SwiftUI View 协议中的EnvironmentObject

    我想制定这样的协议 protocol SubscriptionManagerView View var subscriptionManager EnvironmentObject
  • python装饰器,嵌套函数[重复]

    这个问题在这里已经有答案了 我试图弄清楚为什么在使用装饰器时我需要一个嵌套函数 这是一个例子 def func f def deco args kwargs return f args kwargs return deco func def