如何在 Python 中对函数进行深度复制?

2023-11-23

我想在 Python 中制作一个函数的深度复制。这copy根据该模块没有帮助文档,其中说:

该模块不复制模块、方法、堆栈跟踪、堆栈帧、文件等类型, 套接字、窗口、数组或任何类似的类型。它确实“复制”函数和类(浅层 并深入),通过不变地返回原始对象;这与方式兼容 这些由 pickle 模块处理。

我的目标是拥有两个具有相同实现但具有不同文档字符串的函数。

def A():
    """A"""
    pass

B = make_a_deepcopy_of(A)
B.__doc__ = """B"""

那么如何才能做到这一点呢?


FunctionType 构造函数用于制作函数的深层复制。

import types
def copy_func(f, name=None):
    return types.FunctionType(f.func_code, f.func_globals, name or f.func_name,
        f.func_defaults, f.func_closure)

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

如何在 Python 中对函数进行深度复制? 的相关文章

随机推荐

  • 通过 1 次提交回滚本地和远程 git 存储库 [重复]

    这个问题在这里已经有答案了 我读过有关该主题的类似帖子 但我一生都无法弄清楚如何正确执行此操作 我签入了大约 1000 个我不想要的文件 我不想通过 1by1 将它们全部从存储库中删除 我有一个遥控器master Branch 我有当地的m
  • 是否可以为 std::cin 设置超时?

    是否可以为 std cin 设置超时 例如 std cin 在 10 秒内没有收到任何数据 它会引发异常或返回错误 Edited 那么定时器呢Boost library 据我所知 它是便携式图书馆 是否可以要求 Boost 库的计时器在预定
  • Rails has_many,只查找有孩子的

    我的 产品 表 has many registered products 我想用类似的东西 products find has registered products 其中仅返回在 Registered products 表中也有条目的产品
  • Android Studio 3.3 中缺少 Instant Run

    目前 在 Android Studio 3 3 版本中 缺少允许即时运行的 Apply Changes 选项的快捷方式 还有另一个选项称为 更新正在运行的应用程序 它不提供相同的功能 如屏幕截图所示 此选项在 3 1 等旧版本中可用 我无法
  • 在 OnClickListener 内部我无法访问很多东西 - 如何处理?

    在 OnClickListener 内部 我无法访问作用域 外部 的大多数变量 如下所示 findViewById R id Button01 setOnClickListener new OnClickListener Override
  • 如何读取文件注释字段

    在 OS X Finder 中 有 注释 文件属性 可以通过添加 注释 列在查找器中检查它 也可以在右键单击文件或文件夹并选择 获取信息 后进行编辑 检查 如何在 swift 或 Objective C 中读取这个值 我已经检查过 NSUR
  • GIT:仅从 GitHub 克隆特定分支

    有没有可能从 GitHub 克隆不完整的存储库 而只是克隆选定的分支 我发现可以使用命令进行单分支克隆 git 克隆 git github path to repository git branch my branch 1 single b
  • HttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别

    Unity 现在支持 NET 4 5 我可以使用HttpClient类来自System Net Http命名空间 这很棒 因为我有现有的客户端库 因此很容易重用 有谁知道内部情况之间的区别使用单声道 HttpClient and Unity
  • PHP - 关闭浏览器后会话销毁

    虽然这个问题有多个重复项 但我找不到适合我的正确解决方案 需要一些帮助 我用过ini set session cookie lifetime 0 在我的配置文件中 但它并不能帮助我在浏览器关闭时销毁会话 应用电流 1 在身份验证页面中 如果
  • 上课T?添加范围 ICollection?

    我尝试做静态类 添加到 icollection 但我遇到了一些我似乎无法克服的问题 这就是我得到的方式 以便我可以在方法中传递 ICollection 原因T是说它无法解决 然后我想知道有没有办法在 icollection 上执行 AddR
  • genfromtxt 返回 NaN 行

    我正在尝试使用 numpy 读取 csv 文件 并且有以下代码 from numpy import genfromtxt data genfromtxt open errerr csv r names True delimiter 并出现以
  • 从c#中的控制台输入多行

    我正在尝试从控制台读取 c 中的一些值 然后处理它们 但是我陷入了错误 控制台的输入是 Name ABCD School Xyz Marks 80 here the user enters a new line before enterin
  • git clone:致命:无法从重定向更新 url 库:

    我正在尝试将 gitlab 克隆到我的本地库 在进行克隆时出现错误 致命 无法通过重定向更新 url 库 要求 重定向 用户签名 链接 任何人都可以让我知道如何解决这个问题 是的 我能够解决这个问题 粘贴 URL 时 我们不应该使用浏览器中
  • 为什么这里不需要显式强制转换?

    class MyClass void myMethod byte b System out print myMethod1 public static void main String args MyClass me new MyClass
  • nodejs require - 模块名称区分大小写问题

    最近我发现了一个关于node js require机制的奇怪问题 您可能会认为 由于 Windows 文件系统 所需模块是否区分大小写并不重要 所以 模块A require fancyModule 模块B require fancymodu
  • 如何抑制詹金斯管道控制台输出中的源脚本行回显?

    我正在 Jenkins 中编写一个管道作业 它在管道控制台输出中显示下游作业的输出控制台 到目前为止 该作业正在运行 但由于管道作业本身将所有回显线添加到输出中 因此输出确实很难读取 Started by user email protec
  • Codeigniter - 未指定输入文件

    我是 Codeigniter 的初学者 我看到了 CI 教程 只是想做一件简单的事情 我下载了 CI 并将此文件添加到控制器目录中 但它不起作用 当我尝试使用它访问它时http index php site我得到输出 未指定输入文件 顺便说
  • 谷歌翻译顶栏隐藏

    我在我的网站上使用谷歌翻译 我想隐藏谷歌翻译的顶部栏 请告诉我如何隐藏该栏 请在此处检查我的网站链接http www rewords com让我知道我要隐藏那个栏吗 Thanks 通过 CSS 完成 goog te banner frame
  • :root 变量在 :before 元素上不可用

    我将很多 css 变量分配给 root 但这些变量在我的 before 元素中无法访问 我在网上找不到任何关于此的信息 当检查 before 元素的父元素时 我在谷歌开发工具的样式面板底部看到所有 root 变量 请参阅下面的屏幕截图 my
  • 如何在 Python 中对函数进行深度复制?

    我想在 Python 中制作一个函数的深度复制 这copy根据该模块没有帮助文档 其中说 该模块不复制模块 方法 堆栈跟踪 堆栈帧 文件等类型 套接字 窗口 数组或任何类似的类型 它确实 复制 函数和类 浅层 并深入 通过不变地返回原始对象