跟踪字符串中的组件,尤其是在f字符串中的格式化值。
项目描述
值记录
这是一个用于跟踪字符串中组件组合的Python库。特别是,它允许您将f字符串中的格式化值分离出来。以下是一个示例
from fvalues import F, FValue
x = 1.2345
f = F(f"twice x is {x * 2:.2f}")
assert f == "twice x is 2.47"
assert f.parts == ("twice x is ", FValue(source="x * 2", value=2.469, formatted="2.47"))
关键事实
F
是str
的子类,因此它可以像任何其他字符串一样一般使用。- 使用
executing
库魔术般地检测对构造函数F()
的调用,并解析f字符串以提取其组件。 - 这些保存在属性
F.parts
中。每个part
要么是一个表示常量部分的str
,要么是一个表示动态表达式的FValue
。 FValue.source
包含大括号 ({}) 之间但冒号 (:
) 和格式说明符 (.2f
) 之前的源代码。在某些情况下,它可能不是确切的原始源代码,而是由ast.unparse
产生的等效代码。FValue.value
和FValue.formatted
使用eval()
计算,所以 请小心处理您不希望多次评估的表达式,因为性能或副作用。
在ICE中的使用
这个库是为了增强交互式组合探索器(ICE)而构建的。在下面的屏幕截图中,右侧“输入”下的提示是一个F
对象,而彩色文本对应于动态的FValue
。
连接
F
类还特别支持与+
运算符的连接。
f += "!"
assert f == "twice x is 2.47!"
assert f.parts == (
FValue(
source="f",
value="twice x is 2.47",
formatted="twice x is 2.47",
),
"!",
)
类似于解构f-string,你可以看到在+=
左侧的动态表达式f
如何被区分开来,表示为FValue
,而右侧的静态"!"
。
展平
在上面的断言中,FValue.value
显示为普通字符串,但请记住,它实际上也是一个F
对象。这个断言之所以有效,是因为F
是str
的子类,所以它们可以互换使用。但它仍然具有我们之前看到的相同的parts
。有时保留部分树的原貌可能很有用,有时你可能希望将所有内容都带到表面以便更容易处理。你可以使用F.flatten
生成具有扁平部分列表的等效F
对象。
assert f.flatten().parts == (
"twice x is ",
FValue(
source="x * 2",
value=2.469,
formatted="2.47",
),
"!",
)
其他字符串方法
大多数F
方法(例如.lower()
)直接从str
继承,这意味着它们返回一个普通的str
而不是另一个F
对象。所以如果你不希望丢失部分信息,请小心使用这些方法!以下方法有专门的实现来避免这种情况。未来可能会添加更多。
strip
F.strip
在整体字符串方面与通常的str.strip
做同样的事情,但也会按照你可能会期望的方式去除内部部分。有关更多详细信息,请参阅文档字符串。相关方法lstrip
和rstrip
按预期去除左右两侧。
请确保编写F(f"..."").strip()
而不是F(f"..."'.strip())
,否则f-string的魔法将不起作用。
join
separator.join(strings)
只有在separator
是一个F
对象时才会返回一个F
对象。如果separator
是一个普通的str
,则结果将是一个普通的str
,即使strings
是一个包含F
对象的列表。在实际应用中,这通常意味着你应该编写例如F(" ").join(strings)
而不是" ".join(strings)
。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
fvalues-0.0.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d629d0fff4a5c47b926d94c77d385efed1947c40c5a53f686615c4edb387f56e |
|
MD5 | 1c9c0bb29d8c93943e61772bde57e01a |
|
BLAKE2b-256 | 06a7c9bf5d5392ecf7e0ef0d7aa92e949320f4361d8703e1d42022efa4ecccd6 |