deep=True 在 pyyaml.Loader.construct_mapping 中做什么?

2024-01-19

在网上搜索自定义构造函数的用法时,我看到如下内容:

def some_constructor(loader, node):
    value = loader.construct_mapping(node, deep=True)
    return SomeClass(value)

什么是deep=True做?我在中没有看到它pyyaml 文档 http://pyyaml.org/wiki/PyYAMLDocumentation#Loader.

看来我需要它;我有一个由 py​​yaml 表示器生成的 yaml 文件,它包括节点锚点和别名(例如&id003 and *id003);没有deep=True我得到了包含锚点/别名的那些对象的浅地图。


你看不到的deep=True文档中的 是因为您通常不需要将其用作 PyYAML 包的最终用户。

如果您追踪方法的使用constructor.py那个使用deep=你来construct_mapping() and construct_sequence()在班上BaseConstructor()这两个都调用BaseConstructor.construct_object()。 该方法中要研究的相关代码是:

    if tag_suffix is None:
        data = constructor(self, node)
    else:
        data = constructor(self, tag_suffix, node)
    if isinstance(data, types.GeneratorType):
        generator = data
        data = next(generator)
        if self.deep_construct:
            for dummy in generator:
                pass
        else:
            self.state_generators.append(generator)

特别是for在那里循环,只有在以下情况下才会执行deep=True被传入了。

粗略地说,如果数据来自构造函数是生成器,那么它会遍历该数据(在for循环)直到发电机耗尽。通过该机制,这些构造函数可以包含yield创建一个基础对象,可以在之后填写其详细信息yield。因为他们只是一个人yield在这样的构造函数中,例如用于映射(构造为 Pythondicts):

def construct_yaml_map(self, node):
    data = {}
    yield data
    value = self.construct_mapping(node)
    data.update(value)

我将此称为两步过程(第一步yield方法末尾的旁边。

在这样的两步构造函数中datato be yielded 构造为空,yield 然后填充。之所以如此,是因为您已经注意到了:递归。如果有一个自我引用data下面某处,data无法在其所有子级都构造完成之后再构造,因为它必须等待自身构造完成。

The deep参数间接控制是否递归构建或附加到列表中的潜在生成器的对象self.state_generators稍后再解决。

然后构建 YAML 文档归结为构建顶级对象并循环遍历潜在的递归对象self.state_generators直到没有剩下任何生成器(这一过程可能需要多次传递)。

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

deep=True 在 pyyaml.Loader.construct_mapping 中做什么? 的相关文章

  • 使用参数数组的长度作为同一函数的另一个参数的默认值

    这是我第一次在 SO 中提出问题 所以如果我不知何故做得不对 请毫不犹豫地编辑它或要求我修改它 我认为我的问题有点笼统 所以我很惊讶没有找到任何与该主题相关的先前问题 如果我错过了并且这个问题重复了 如果您能提供已回答的链接 我将非常感激
  • ModuleNotFoundError:没有名为“googleapiclient”的模块

    如果这是一个愚蠢的问题 我深表歉意 我在 stackoverflow 上搜索过 但没有找到解决办法 我正在致力于从 Python 2 7 迁移到 Python 3 8 我收到一个程序的以下错误 请帮我 Traceback most rece
  • 为 Python 终端提供持久的历史记录

    有没有办法告诉交互式 Python shell 保留会话之间执行命令的历史记录 当会话运行时 在执行命令后 我可以向上箭头并访问所述命令 我只是想知道是否有某种方法可以保存一定数量的这些命令 直到下次使用 Python shell 时 这将
  • python ImportError:没有名为 Tkinter 的模块

    每次我尝试奔跑import matplotlib 我有错误ImportError No module named Tkinter 输出结果如下所示 Python 2 7 5 default Aug 2 2016 04 20 16 GCC 4
  • python中的“For”循环结构

    当我调试一小段代码时 我注意到一些意想不到的事情 for 循环循环遍历文件名以删除数字 通过查看字符串的每个字符并替换它 似乎打印了文件名 因为它存在于循环的第一遍中并循环遍历这些字母 所以如果像我在代码中所做的那样 对传递给循环的字符串进
  • 多索引上的 pandas dataframe groupby

    我正在使用 Pandas dataframe 来读取 Excel 文件并对其进行一些操作 我有一个包含多行的标题 现在我想按几个列值进行分组 但是我无法找到解决方案 Excel 示例 name address contact info fi
  • 尽管脚本是“纯”Python,但 .py 和 .ipy 文件的 IPython 行为不同(自定义异常处理程序挂钩停止工作)

    我编写了一个异常处理程序 旨在记录所有未捕获的异常 在调用普通 python 异常挂钩之前的代码中 Python 和 iPython 执行此操作的方法略有不同 我发现 iPython 这样做的方法仅在从交互式会话中运行时有效 或者当 使用
  • Django - 没有名为 _sqlite3 的模块

    我在 rhel 5 上安装了 django 1 4 默认情况下 rhel 5 中有 python 2 4 但要使用 django 1 4 我手动安装了 python 2 7 3 开发服务器运行良好 但是当我创建一个新项目并将 setting
  • 每个值有多个键

    是否可以在 Python 字典中为每个值分配多个键 一种可能的解决方案是为每个键分配值 dict k1 v1 k2 v1 k3 v1 k4 v2 但这并不高效 因为我的数据文件大于 2 GB 否则你可以制作一个字典键的字典 key dic
  • spacy 是否将令牌列表作为输入?

    我想使用 spacy 的 POS 标记 NER 和依存解析 而不使用单词标记化 事实上 我的输入是代表一个句子的标记列表 我想尊重用户的标记化 无论是使用 spacy 还是任何其他 NLP 包 这是否可能 现在 我使用这个基于 spacy
  • Python 的分布式锁管理器

    我有一堆具有多个实例的服务器 这些实例访问的资源对每秒的请求有硬性限制 我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问 我在github上找到了一个restful分布式锁管理器 https github com thefab
  • PyCharm 调试模式下的键盘中断

    在调试模式下 有什么方法可以在 PyCharm IDE 3 1 中发送键盘中断事件吗 不幸的是 没有简单的方法可以做到这一点 您将需要使用psutil和signal模块 为此 您需要安装psutil最好的方法是通过pip pip insta
  • 使用 urllib 下载 HTTPS 页面,错误:14077438:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 警报内部错误

    我正在使用最新的Kubuntu with Python 2 7 6 我尝试下载一个https使用以下代码的页面 import urllib2 hdr User Agent Mozilla 5 0 X11 Linux x86 64 Apple
  • 如何删除Python字符串的最后一个utf8字符

    我有一个包含 utf 8 编码文本的字符串 我需要删除最后一个 utf 8 字符 到目前为止我做到了 msg msg 1 但这只会删除最后一个字节 只要最后一个字符是 ASCII 代码 它就可以工作 当最后一个字符是多字节字符时 它不再起作
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr
  • 绘制与Fig.show()内联的IPython Notebook图形?

    我正在使用 IPython Notebook 调用内联模式 pylab inline 以下代码立即在单元格处绘制一个图形 fig plt figure axes fig add axes 0 0 1 1 不过 我想在一个单元格中创建绘图 轴
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • 如何在 C# 中引用另一个项目?

    我在我的解决方案中添加了一个项目 Project2 它已经有另一个项目 比如说项目 1 我如何将项目 2 中的类和方法调用到项目 1 中 我做了什么 我有项目 1 及其解决方案 我将项目 2 添加到项目 1 的解决方案中 项目 1 和项目
  • Java 8 DateTimeFormatters 常量在哪里定义?

    我正在看DateTimeFormatter https docs oracle com javase 8 docs api java time format DateTimeFormatter html类 我想知道常量在哪里 M EEE a
  • 包含或异或有什么区别?

    我一直在研究一些业务流程执行语言 BPEL 和相关的建模系统 BPMN 其中设计人员需要了解流程流的包容性和排他性网关 非常感谢您的帮助 假设适用相同的规则 对术语的一般解释就足够了 这是我试图理解的一些技术文本对马克的回应 对于连接两个活
  • 是否在数据库级别或服务器/实例级别启用了“CLR 集成”?

    我试图了解启用 CLR 是否在数据库级别或服务器级别 实例级别启用它 在线书籍根本不清楚 如果我使用此命令启用 CLR 会发生什么 它会在所有服务器上启用吗 sp configure clr enabled 1 GO RECONFIGURE
  • “结合更牢固”这句话是什么意思?

    我知道这可能是一个新手问题 但我试图理解这句话 来自一篇关于使用 EBNF 的元语言的论文 Logical and binds stronger than logical or 在此之前它说 Conditions are condition
  • 无法从 master 连接到 kubernetes pod:i/o 超时

    我配置了 1 个主节点和一个节点的 kubernetes 集群 运行主节点和节点的机器不在同一网络中 对于网络 我安装了 calico 并且所有 pod 都在运行 为了测试我使用的集群获取外壳示例 https kubernetes io d
  • 用 Java 写入文件

    我对 Java 很陌生 由于某种原因我无法写入文件 我的代码如下所示 FileWriter fstream try fstream new FileWriter fileLocation BufferedWriter out new Buf
  • 如何定期更新 Label 控件的值?

    我试图让标签显示一些文本 然后在一段时间后刷新自身并能够稍后重新显示其他内容 但目前我不知道如何使标签暂停 如果可能的话 到目前为止我的代码 foreach var x in mod labelWARNING Visible true la
  • 全屏纹理采样的最佳方式

    在片段着色器中采样全屏纹理的最佳方法是什么 例如延迟渲染器中的 g 缓冲区 或后处理着色器中的场景纹理 目前我使用以下两种方式 将屏幕尺寸作为统一值传递给着色器并计算 u v gl FragCoord vec2 texCoord gl Fr
  • 在 .each 循环中显示一个条目的模式 - Rails / Bootstrap

    我想要一个链接来打开一个模式 显示单击的对象 word title 显示在每个循环中 现在它会打开模式 但随后会为循环中的每个项目再次显示它 h1 Glossary of words h1 p Pagination at 25 p tabl
  • 如何将 CSV 或 JSON 导入到 firebase cloud firestore

    有没有办法像 Firebase 实时数据库一样将 CSV 或 JSON 导入到 firebase cloud firestore 通用解决方案 我发现许多脚本允许上传 JSON 但没有一个允许子集合 我上面的脚本处理任何级别的嵌套和子集合
  • 如何使用XNA加载文件夹中的所有文件?

    我想加载文件夹中的所有文件 内容 纹理 进入游戏使用Content Load 文件名 但是 我无法以这种方式 找到 位于 Content 内的文件 该程序而是查看 bin 调试 内容 纹理 但是当尝试使用 Content Load 加载 j
  • 模板类成员特化声明

    当我在模板类中专门化一个 静态 成员函数 常量时 我 对声明的去向感到困惑 这是我要做什么的一个例子 直接来自IBM 关于模板专业化的参考 http publib boulder ibm com infocenter comphelp v8
  • Koa 中的 Promise 错误处理

    如果我在 Koa 中做出承诺 它们可能会被拒绝 function fetch var deferred q defer Some async action which calls deferred reject return deferre
  • 如何让Android上的工具栏占据全宽?

    结果如下 https i stack imgur com VgbZT png https i stack imgur com VgbZT png 我希望它位于状态栏正下方且全宽 就像这样 https i stack imgur com FF
  • Internet Explorer 8 在哪里存储其故障转储?

    我正在对抗一个错误 该错误不会在我的计算机上重现 但每次都会在我客户的计算机上重复 我已经尝试了一切 现在我正在寻找 IE8 崩溃后留下的任何调试数据 或其他数据 谷歌和微软的搜索没有给我任何结果 Internet Explorer 8 在
  • npm 错误! npm install 时代码 EINTEGRITY

    当我尝试进行 npm install 时 出现此错误 npm ERR code EINTEGRITY npm ERR sha512 boQj1WFgQH3v4clhu3mTNfP vOBxorDlE8EKiMjUlLG3C4qAESnn9A
  • 将 div 定位到包含 div 的底部

    如何将 div 定位到包含 div 的底部 div class outside div class inside inside div div 此代码将文本 inside 放置在页面底部 outside width 200px height
  • aov 公式错误项:矛盾的例子

    我已经看到了 R 中受试者内设计的通用公式的两种基本方法aov R 随机 X 依赖 W 内 B 之间 Pure within X Error R W1 W2 or X W1 W2 Error R W1 W2 Mixed X B1 B2 Er
  • deep=True 在 pyyaml.Loader.construct_mapping 中做什么?

    在网上搜索自定义构造函数的用法时 我看到如下内容 def some constructor loader node value loader construct mapping node deep True return SomeClass