两个命令不应该做同样的事情吗?
>>> "{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"
在字典键周围没有引号。当然,这种简单性存在局限性,例如无法在其中引用带有]
的键,或者解释切片,如您的示例所示。
请注意,kendall提到的f字符串由编译器处理并且(适当地)使用(almost) unrestricted expression syntax。他们需要这种力量,因为他们缺乏将这些表达式放在format
参数列表中的明显替代方案。