python - 从格式化字符串中切片字符串会给出“TypeError:字符串索引必须是整数”
问题描述
这两个命令不应该做同样的事情吗?
>>> "{0[0:5]}".format("lorem ipsum")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
>>> "{0}".format("lorem ipsum"[0:5])
'lorem'
命令
>>> "{0[0]}".format("lorem ipsum")
'l'
和
>>> "{0}".format("lorem ipsum"[0])
'l'
评价一样。(我知道我可以使用其他方法来做到这一点,我主要只是好奇为什么它不起作用)
解决方案
str.format
语法由库处理,仅支持少数与常规 Python 语法不同的“表达式”语法。例如,
"{0[foo]}".format(dict(foo=2)) # "2"
在字典键周围没有引号的情况下工作。当然,这种简单性存在一些限制,例如无法引用其中包含 a 的键]
,或者无法解释切片,如您的示例中所示。
请注意,kendall 提到的 f 字符串由编译器处理,并且(恰当地)使用(几乎)不受限制的表达式语法。他们需要这种能力,因为他们缺乏将这些表达式放在参数列表中的明显替代方法format
。
推荐阅读
- reactjs - 如何在关注点分离和避免代码重复之后重构这个 reducer?
- pnpm - pnpm 列表不显示传递依赖项
- ethereum - 如何减少从另一个合约调用一个合约的代币余额?
- python - Python 3.8 - 软件包版本已损坏,但在本地安装时有效
- python - 使用类定义扫描计算机系统文件
- javascript - Javascript 无法识别“src”
- spring-boot - 使用 Jhipster 进行自定义查询选择
- microsoft-teams - ms 团队自动发送“附件 ID”的 HTTP POST
- ethereum - 智能合约特许权使用费已实施,但所有者没有获得任何份额
- node.js - Cobertura 格式代码覆盖率报告,用于 Azure Devops 上的 React App