使用 Python 装饰器跟踪递归深度

2024-02-25

我正在尝试编写一个装饰器来跟踪Python中递归函数的递归深度。

以递归函数为例,例如


def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)

通常,要跟踪递归深度,您可以编写如下内容


    def fib(n, level=0):
        print(level)
        if n == 0:
            return 0
        if n == 1:
            return 1
        else:
            return fib(n-1, level=level+1) + fib(n-2, level=level+1)

然而,在摆弄装饰器一段时间并进行大量谷歌搜索之后,我不确定这是否可能。

我尝试过类似的事情


def visualise(func):
    def modify(*args, **kwargs):
        kwargs["count"] += 1
        print(kwargs["count"])
        return func(*args, **kwargs)

    return modify

@visualise
def fib(n):
    ...

fib(4, count=0)

但它抱怨说count是一个意外的关键字参数,我不太理解,因为我的印象是包装器modify替换所有出现的fib但我想不是吧?

指针将不胜感激。


您可以为装饰器指定级别变量,然后在函数调用中使用它,如下所示:

def visualise(func):
     visualise.level = 0
     def wrapper(*args, **kwargs):
         print("In:", visualise.level)
         visualise.level += 1
         result = func(*args, **kwargs)
         visualise.level -= 1
         print("Out:", visualise.level)
         return result
     return wrapper
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 装饰器跟踪递归深度 的相关文章

  • 使用天蓝色错误“找不到资源”进行情绪分析

    我创建了一个 python 程序 它接受字符串作为输入并对其执行情感分析 我已经按照文档中所述创建了环境变量 并重新启动了 cmd 和 Visual Studio 但仍然出现以下错误 遇到异常 操作返回无效状态代码 未找到资源 python
  • Flask/Apache 提交按钮用于文件上传

    我有一个在 apache 后面运行的 Flask 应用程序 在我的 index html 页面上有一个文件上传按钮和一个提交按钮 如下所示
  • 我无法使用 Python 和 Facebook Marketing API 获取所有 Facebook 营销活动的统计信息

    我正在尝试检索以下指标 date campaign name impressions clicks spend 在我的 Facebook 帐户中的所有活动中 但显然我编写的脚本仅返回某些活动的统计数据 而不是全部 它仅返回大多数营销活动的营
  • python 类的属性不在 __init__ 中

    我想知道为什么下面的代码有效 usr bin env python3 import sys class Car def init self pass if name main c Car c speed 3 c time 5 print c
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 计算 for 循环期间的运行总计 - Python

    编辑 下面是我根据收到的反馈 答案编写的工作代码 这个问题源于我之前使用 MIT 的开放课件学习 Python CS 时提出的问题 在这里查看我之前的问题 https stackoverflow com questions 4990159
  • 预处理 csv 文件以与 tflearn 一起使用

    我的问题是关于在将 csv 文件输入神经网络之前对其进行预处理 我想使用 python 3 中的 tflearn 为著名的 iris 数据集构建一个深度神经网络 数据集 http archive ics uci edu ml machine
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • Python控制台默认十六进制显示

    我在 Python 控制台中做了很多工作 其中大部分都涉及地址 我更喜欢以十六进制形式查看地址 So if a 0xBADF00D 当我简单地输入Python gt a进入控制台查看其值 我更喜欢 python 回复0xBADF00D代替1
  • Tensorflow 到 ONNX 的转换

    我目前正在尝试转换我使用本教程创建的已保存 且正在工作 的 pb 文件 https github com thtrieu darkflow https github com thtrieu darkflow 到 onnx 文件中 我目前正在
  • Python:动态向对象添加字段

    我想知道是否可以动态向对象添加字段 例如 我希望能够添加如下内容 user object user first name John user last name Smith 当我在 Python 命令行解释器中执行该命令时 我得到 Attr
  • 如何使用子进程打开新的浏览器选项卡?

    我正在打开一个新的 IE 窗口 subprocess Popen r os environ PROGRAMFILES Internet Explorer IEXPLORE EXE Call URL 当 IE 关闭时这很好 但即使打开它也会生
  • 替换 pandas 数据框中的点

    我有一个如图所示的数据框 数字实际上是对象 正在做df treasury rate pd to numeric df treasury rate 可预见的炸弹 然而 做df replace np nan 似乎没有摆脱这个点 所以我很困惑 有
  • 如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

    Scikit learn 具有相当用户友好的用于机器学习的 python 模块 我正在尝试训练用于自然语言处理 NLP 的 SVM 标记器 其中我的标签和输入数据是单词和注释 例如 词性标记 而不是使用双精度 整数数据作为输入元组 1 2
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • RuntimeError:模型类 django_messages.models.Message 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中

    我正在尝试使用https github com arneb django messages https github com arneb django messages打包我的消息传递内容并尝试了以下操作 pip install git h
  • Numba jitclass 不适用于 python 列表

    我在用python 3 6 and numba 0 36 这个问题有一个sister https stackoverflow com questions 48159360 numba custom stack class and pop f
  • 使用多行选项和编码选项读取 CSV

    在 azure Databricks 中 当我使用以下命令读取 CSV 文件时multiline true and encoding SJIS 似乎编码选项被忽略了 如果我使用multiline选项 Spark 使用默认值encoding那
  • 在 Mac (Catalina) 上安装 PyGame 时出错 [重复]

    这个问题在这里已经有答案了 我一直在尝试将 PyGame 安装到 Catalina 上的 Mac 上 但不知道如何安装 我收到的错误消息是 SystemExit error command gcc failed with exit stat
  • 磁盘寻道时间测量方法

    我编写了一个脚本来测量 HDD 上的寻道时间 并且其完成方式的微小变化会导致显着不同的时间 第一个周期在磁盘开头的区域内进行跳转 第二个周期选择磁盘上执行查找的随机区域 相同大小 这种方法显然不同 但我不明白为什么它会改变结果 请注意 对于

随机推荐

  • 将代码作为参数传递给方法

    我有一个方法列表 它们几乎做同样的事情 除了一些差异 void DoWork string parameter1 string parameter2 Common code Custom code Common code 我想通过从另一个方
  • 如何指定系统默认的衬线和无衬线字体系列?

    当我十多年前学习 CSS 时 使用 默认字体 无论这意味着什么 的标准 也是唯一 方法是 font family serif font family sans serif 然后 去年 苹果添加了一个新系统字体的自定义语法 https sta
  • PIP 随机失败“无法找到满足要求的版本”,且具有相同的requirements.txt

    作为 CI 测试的一部分 我们安装了一个 virtualenv 其中包含来自常量 requests txt 文件的一些 pip 包 由于requirements txt文件没有改变 这个安装过程有时会随机失败 没有明显的原因 而且每次都是不
  • 在 C++ 中将整数存储到 char* 中

    我正在编写一些返回整数的代码 然后需要使用 ncurses 库中的 printw 输出该整数 但是 由于 printw 只接受 char 我不知道如何输出它 本质上 有没有办法将整数存储到 char 数组中 或者使用 printw 输出整数
  • 如何将一个分支的内容复制到另一个分支?

    我有 develop 和 InitialPomChanges 分支 我想将开发分支的所有内容复制到InitialPomChanges分支 假设您想用开发中的内容覆盖 InitialPomChanges 的所有内容 即您希望 InitialP
  • Pandas:将 WinZipped csv 文件转换为数据框

    我有几个 WinZipped csv 文件 想将它们作为 Pandas 数据框读取 问题是两个解压缩选项 gzip 或 bz2 似乎都不起作用 该文件如下所示 00000000011 00023011 89011 200812 000000
  • 由于 cpp11 编译错误,R tidyr 包安装失败(扩展模式 x 不包含参数包)

    我有以下与 cp11 相关的错误 看起来 cp11 编译有错误 我不知道如何解决 我尝试做的就是卸载该软件包并再次重新安装 我使用的是 RHEL 7 gcc 版本是 4 8 5 gt install packages tidyverse I
  • 在 CSS 中缩放文本和图像

    我正在尝试缩放背景图像以适应任何屏幕 同时在图像上写入文本并进行缩放以适应屏幕尺寸 这是网站 www beautebeaute dk 我通过在这个论坛中搜索答案来准备背景图片 与此代码配合使用效果很好 CSS imagescale widt
  • Reactjs 中的 Axios 和 fetch 都在发出连续的本地主机网络请求

    这是来自 Express 后端和 MongoDB 数据库的路由代码以及来自前端的正常调用fetch 它返回index html代码并添加fetch http localhost 9000 它返回 CORS 错误 所以我添加了app use
  • MVC3 RadioButtonFor 带枚举

    我的模型中的 HtmlHelper RadioButtonFor 和枚举有问题 我有一个强类型视图 我希望复选框可以切换我的枚举属性 Enum cs public enum Values Value1 Value2 Model cs pub
  • 使用 Canvas 在 JS 中动画排序算法

    为了好玩 我尝试创建不同排序算法的可视化 但我遇到了 Canvas 动画的问题 我假设我只能在排序器方法中调用绘制函数 但这会导致浏览器锁定 直到数组完全排序 然后绘制一些中间帧 我将如何在排序方法中进行动画处理 下面是我到目前为止的代码
  • 在R中使用dplyr根据类型和滚动日期进行计数和标记

    我的问题类似于dplyr 使用滚动时间窗口对数据进行分组和汇总 变异 https stackoverflow com questions 36187931 dplyr grouping and summarizing mutating da
  • 如何解决 JSLint 警告“不要使用‘新’产生副作用”?

    为什么我会收到这些错误 第 329 行第 60 行字符的问题 不要使用 new 来产生副作用 new widget StyledDropdown dojo byId sTitle 第 330 行第 61 行字符的问题 不要使用 new 来产
  • Python 2 十进制的 Sin、cos 等?

    在Python 2 6中 我发现Decimal相当于sqrt pi is Decimal pi sqrt sin cos 或其他 反 三角函数是否有类似的函数 The docs http docs python org library de
  • 方法调用作为另一个方法调用的参数?

    我是abap OO 的新手 但之前用java开发过 并编写了一个abap cl caretaker 类 它应该处理数据库表及其本地副本 实习生表 上的操作 我想进行以下方法调用 caretaker gt show table caretak
  • Rails:使用remote: true 停止页面刷新

    我有一个projects show html erb页 Aproject has many project messages并从projects show html erb页面 用户可以创建一个新的project message然而 当新的
  • 模型绑定新Datatables 1.10参数

    在 Datatables 1 10 中 ajax 服务器端参数从 public class DataTableParamModel public string sEcho get set public string sSearch get
  • 如何将 AdMob GADBannerView 添加到每个视图

    我正在我的应用程序中实现一个 AdMob 横幅UIViewController 并且它正在工作 但我有很多视图 我想在每个屏幕上显示一个横幅 我如何实现一个出现在每个屏幕上的横幅 我正在尝试这个AppDelegate swift dispa
  • 谷歌地图添加标记

    我想在 Android 中的 Google 地图上添加标记 任何人都可以帮我做到这一点 如果你们有示例代码 这会对我有很大帮助 并且还告诉我如何设置地图片段的大小 提前致谢 use addMarker like myMap addMarke
  • 使用 Python 装饰器跟踪递归深度

    我正在尝试编写一个装饰器来跟踪Python中递归函数的递归深度 以递归函数为例 例如 def fib n if n 0 return 0 if n 1 return 1 else return fib n 1 fib n 2 通常 要跟踪递