python - f-string 的行为与嵌套格式化的格式化方法不同
问题描述
我正在使用嵌套格式化format
,但它没有按预期工作。但是,如果我尝试使用 f-strings 来完成它,它会完美地工作。
例子:
这样做:
values = 'first', 'second', 'third'
a = f"""cardinality and values: {'|'.join(f'val:{val}, card:{i}'for i, val in enumerate(values))} """
给了我这个(需要的结果):
'cardinality and values: val:first, card:0|val:scond, card:1|val:third, card:2'
但是,如果我尝试使用format
:
a = """cardinality and values: {'|'.join('val:{val}, card:{i}'.format(val=val, i=i) for i, val in enumerate(values))} """.format(values=values)
我得到以下异常:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'|'"
我该怎么做format
?
我需要使用format
而不是 f-strings,因为另一个文件会导入此字符串然后对其进行格式化。
解决方案
format
只是不如 f-strings 强大,因此您必须简化格式字符串。
只需从格式字符串外部获取理解:
a = "cardinality and values: {} ".format('|'.join('val:{val}, card:{i}'.format(val=val, i=i) for i, val in enumerate(values)))
结果:
cardinality and values: val:first, card:0|val:second, card:1|val:third, card:2
如果你想制作一个单行“模板”,你可以使用lambda
:
a = lambda v : "cardinality and values: {} ".format('|'.join('val:{val}, card:{i}'.format(val=val, i=i) for i, val in enumerate(v)))
现在打电话
print(a(values))
调用lambda
使用传递的values
. 这是我能想到的最接近没有 f 弦的 f 弦。
推荐阅读
- nix - 如何将我的 nix 环境重置为原始用户配置文件?
- c# - MailAddress 到正确的传真服务器工作不正常
- reactjs - 如何在reactjs的组件中使用存储在另一个constant.js文件中的数组
- php - 如何将phpdom保存到xml中?
- google-apps-script - 范围宽度不正确(为 1 但应为 2)
- hadoop - 如何为映射器输出设置 avro 压缩编解码器?
- spring-boot - 如何修复“NoSuchMethodError ParameterMetadataImpl
- android - 防止 RecyclerView GridLayout 中子级之间的双倍间距
- python - 如何刮取具有特定期权价值的期权
- python - 人脸识别keras维数问题