- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:
我创建了一个模块来提供此功能。它可能不是那么好,但可以得到 here .
我需要能够解析格式字符串(由 string format specification mini language 指定)。我正在从事的一个项目大量使用了 parse
用于“取消格式化”字符串的模块。该模块允许创建自定义格式代码/公式。我的意图是以某种与现有字符串格式规范迷你语言一致的方式自动解析某些类型的格式字符串。
澄清一下:“格式字符串”是指在使用 str
的 format
函数和 format
方法时使用的那些字符串对象,例如:
'{x!s: >5s}'.format('foo') # the format string is ' >5s'
我看过cpython string module在我看来,第 166 行好像在说格式字符串的解析是在 _string
模块中处理的。
# The overall parser is implemented in _string.formatter_parser.
这发生在这一行 (# 278):
return _string.formatter_parser(format_string)
我对 cPython 代码库很不熟悉,也不是 C 程序员,我找不到 _string
模块。我想知道它是否在C语言级别实现......?
主要问题:格式规范解析实现是否暴露在某处以供使用?我怎样才能得到它,所以我不必自己写?我希望得到这样的输出:
>>> parse_spec(' >5.2f')
{'fill': ' ', 'align': '>', 'sign': None, '#': None, '0': None, 'width': 5, ',': None, 'precision': 2, 'type': 'f'}
请注意,评论说,尽管它的名字,_string.formatter_parser
并没有做我想要的。
# returns an iterable that contains tuples of the form:
# (literal_text, field_name, format_spec, conversion)
# literal_text can be zero length
# field_name can be None, in which case there's no
# object to format and output
# if field_name is not None, it is looked up, formatted
# with format_spec and conversion and then used
def parse(self, format_string):
return _string.formatter_parser(format_string)
最佳答案
格式规范是针对每个对象的;它由 __format__()
method 解析一个对象。例如,对于字符串对象,该方法在 C 中实现为 unicode__format__
function .
许多格式在对象类型之间是共享的,处理它的代码也是如此。 formatter_unicode.c
file处理大多数格式字符串解析。在此文件中,parse_internal_render_format_spec()
function进行大部分解析。
不幸的是,这个函数没有暴露给 Python 代码。此外,它被声明为 static
,因此您也无法从外部访问它(例如,通过 ctypes
wrapper )。您唯一的选择是重新实现它,或者使用从函数中删除的 static
关键字重新编译您的 Python 源代码,然后通过共享库访问它。
关于python - 访问cpython字符串格式规范迷你语言解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44551535/
如果您使用 -i 选项调用 cpython 解释器,它会在完成任何命令或脚本后进入交互模式。有没有办法在程序中让解释器执行此操作,即使它没有给出 -i?明显的用例是在异常情况发生时通过交互式检查状态进
我是按照官方cpython代码link here上的说明操作的.我做了一个 hg update 3.5 然后做了以下。 sudo apt-get build-dep python3.5 但它抛出了一个
我打算尝试使用 PyPy。但是我用 rust-cpython 编写的扩展(.so 文件)在使用 pypy3 执行时无法加载: ImportError: No module named 'pkg.lib
我试图配置预提交挂接,在运行预提交运行--所有文件时,我收到以下错误:。我已尝试升级pip以解决此问题pip安装--升级pip,但我收到另一个错误:。我尝试检查PIP和PIP3的版本,但现在我也收到了
我想为 android 创建电影下载应用程序以供学习。 为了方便开发,我想使用 youtube-dl 作为下载器后端。 所以我想将 Cpython 运行时和 ffmpeg(用于转换电影格式)嵌入到 A
我有一个 Windows fatal exception: code 0xc0000374 - 是的,有多处理(等待但是......)。 Google 表示异常代码 0xc0000374 表示堆损坏。
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我刚刚成功编译了 C++ 类的 Python 包装器。但是,当我尝试将模块加载到 Python 时(通过 import cell),我收到以下消息: ImportError: dynamic modu
在我用 python 函数包装的一个 C++ 源文件中,有人包含了以下内容: namespace some_namespace { static double some_double; } flo
例如,0 STORE_NAME 0 (sys) 是import sys 指令的一部分。这种指令格式有任何文档吗?更何况,这种格式是Python的标准吗?还是具体实现? 最佳答案 即Python byt
我有这个故意不高效的代码: def suffix_array_alternative_naive(s): return [rank for suffix, rank in sorted((s[
应该如何编写 CPython 扩展,以便 pydoc 提及参数名称而不是 (...)? 我关注了 official python tutorial about extending Python ,甚至
我正在尝试在运行 Raspbian Jessie 的 Raspberry Pi 上从源代码构建和安装 python 3.6.2。以下是构建过程的过程: $ ./configure --enable-o
GAE 有各种限制,其中之一是最大的可分配内存块大小为 1Mb(现在是 10 倍,但这并没有改变问题)。这一限制意味着不能在 list() 中放置超过一定数量的项目,因为 CPython 会尝试为元素
我和一个 friend 聊天,比较语言,他提到 Java 的自动内存管理优于 Python,因为 Java 有压缩,而 Python 没有——因此对于长时间运行的服务器,Python 是一个糟糕的选择
我一直在深入研究源代码,以找出打印结果的时间点。例如: >>> x = 1 >>> x + 2 3 以上两条语句编译为: 1 0 LOAD_CONST
我最近在生产系统中发现了一个潜在的错误,其中两个字符串使用身份运算符进行比较,例如: if val[2] is not 's': 我想这无论如何都会经常起作用,因为据我所知,CPython 将短的不可
Python 允许字符串乘以整数: >>> 'hello' * 5 'hellohellohellohellohello' 这是如何在 CPython 中实现的? 我特别感谢指向源代码的指针; the
我正在阅读 this page在文档中,并注意到它说 This is the full Python grammar, as it is read by the parser generator an
我目前正在制作 CPython 3.0 Python 解释器的嵌入式系统端口,我对任何引用资料或文档特别感兴趣,这些引用资料或文档提供有关版本 3.0 的代码设计和结构的详细信息,甚至是任何2.x 版
我是一名优秀的程序员,十分优秀!