使用 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 sys.path 故障排除

    python 文档位于http docs python org library sys html http docs python org library sys html比如说sys path is 从环境变量 PYTHONPATH 以及
  • 蟒蛇 | MySQL | AttributeError:模块“mysql.connector”没有属性“connect”

    我正在学习 python 中的一个新库 mysql 我尝试执行以下命令 import mysql connector mydb mysql connector connect host localhost user root passwd
  • 获取 .wav 文件长度或持续时间

    我正在寻找一种方法来找出 python 中音频文件 wav 的持续时间 到目前为止我已经了解了 pythonwave图书馆 mutagen pymedia pymad我无法获取 wav 文件的持续时间 Pymad给了我持续时间 但它不一致
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 稀有对象的 python 类型注释,例如 psycopg2 对象

    我了解内置类型 但是我如何指定稀有对象 例如数据库连接对象 def get connection and cursor gt tuple psycopg2 extensions cursor psycopg2 extensions conn
  • Mypy 无法从文字列表推断项目的类型

    我有一个变量x和一个文字列表 例如 0 1 2 我想转换x这些文字之一 如果x在列表中 我将其退回 否则我返回一个后备值 from typing import Literal Set Foo Literal 0 1 2 foos Set F
  • 使用 Paramiko 进行 DSA 密钥转发?

    我正在使用 Paramiko 在远程服务器上执行 bash 脚本 在其中一些脚本中 存在与其他服务器的 ssh 连接 如果我只使用 bash 不使用 Python 我的 DSA 密钥将被第一个远程服务器上的 bash 脚本转发并使用 以连接
  • 使用 for 循环创建一系列元组

    我已经搜索过 但找不到答案 尽管我确信它已经存在了 我对 python 很陌生 但我以前用其他语言做过这种事情 我正在以行形式读取数据文件 我想将每行数据存储在它自己的元组中 以便在 for 循环之外访问 tup i inLine wher
  • 两个不同长度的数据帧的列之间的余弦相似度?

    我在 df1 中有文本列 在 df2 中有文本列 df2 的长度将与 df1 的长度不同 我想计算 df1 text 中每个条目与 df2 text 中每个条目的余弦相似度 并为每场比赛给出分数 输入样本 df1 mahesh suresh
  • python中basestring和types.StringType之间的区别?

    有什么区别 isinstance foo types StringType and isinstance foo basestring 对于Python2 basestring是两者的基类str and unicode while type
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • 给定一个排序数组,就地删除重复项,使每个元素仅出现一次并返回新长度

    完整的问题 我开始在线学习 python 但对这个标记为简单的问题有疑问 给定一个排序数组 就地删除重复项 使得每个 元素只出现一次并返回新的长度 不分配 另一个数组的额外空间 您必须通过修改输入来完成此操作 数组就地 具有 O 1 额外内
  • 如何查找或安装适用于 Python 的主题 tkinter ttk

    过去 3 个月我一直在制作一个机器人 仅用代码就可以完美运行 现在我的下一个目标是为它制作一个 GUI 但是我发现了一些障碍 主要的一个是能够看起来不像一个 30 年前的程序 我使用的是 Windows 7 我仅使用 Python 3 3
  • Ubuntu systemd 自定义服务因 python 脚本而失败

    希望获得有关 Ubuntu 中的 systemd 守护进程服务的一些帮助 我写了一个 python 脚本来禁用 Dell XPS 上的触摸屏 这更像是一个问题 而不是一个有用的功能 该脚本可以工作 但我不想一直启动它 这就是为什么我想到编写
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • Python 中维基百科 API 中的 DisambiguationError 和 GuessedAtParserWarning

    我想获得维基百科与搜索词相关的可能且可接受的名称列表 在这种情况下是 电晕 当输入以下内容时 print wikipedia summary Corona 这给出了以下输出 home virej local lib python3 8 si
  • 为什么 __dict__ 和 __weakref__ 类从未在 Python 中重新定义?

    类创建似乎从来没有re 定义 dict and weakref class属性 即 如果它们已经存在于超类的字典中 则它们不会添加到其子类的字典中 但始终re 定义 doc and module class属性 为什么 gt gt gt c
  • 检测是否从psycopg2游标获取?

    假设我执行以下命令 insert into hello username values me 我跑起来就像 cursor fetchall 我收到以下错误 psycopg2 ProgrammingError no results to fe
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar

随机推荐

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

    我有一个方法列表 它们几乎做同样的事情 除了一些差异 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 通常 要跟踪递