Python 字符串格式混乱
MarkLutz的O'Reilly的《学习Python强大的面向对象编程》教授了格式化字符串的不同方法Python 字符串格式混乱,python,string-formatting,Python,String Formatting,MarkLutz的O'Reilly的《学习Python强大的面向对象编程》教授了格式化字符串的不同方法 下面的代码让我感到困惑。我将“ham”解释为在索引0处填充格式位置标记,但它仍然会在输出字符串的索引1处弹出。请帮助我了解到底发生了什么 代码如下: template = '{motto}, {0} and {food}' template.format('ham', motto='spam', food='eggs') 以下是输出: 'spam, ham and eggs' 我期望: '
下面的代码让我感到困惑。我将“ham”解释为在索引0处填充格式位置标记,但它仍然会在输出字符串的索引1处弹出。请帮助我了解到底发生了什么 代码如下:
template = '{motto}, {0} and {food}'
template.format('ham', motto='spam', food='eggs')
以下是输出:
'spam, ham and eggs'
我期望:
'ham, spam and eggs'
您唯一需要了解的是,
{0}
引用发送到format()
的第一个(zeroeth)未命名的参数。通过删除所有未命名的引用并尝试使用线性填充,我们可以看到这种情况:
>>> "{motto}".format("boom")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'motto'
这里,format()
正在参数列表中查找第二个未命名的参数,但该参数不存在,因此它会收到“元组索引超出范围”错误。这就是Python中传递的未命名(位置敏感)参数和命名参数之间的区别
您唯一需要了解的是,
{0}
引用发送到format()
的第一个(零位)未命名的参数。通过删除所有未命名的引用并尝试使用线性填充,我们可以看到这种情况:
>>> "{motto}".format("boom")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'motto'
这里,format()
正在参数列表中查找第二个未命名的参数,但该参数不存在,因此它会收到“元组索引超出范围”错误。这就是Python中传递的未命名(位置敏感)参数和命名参数之间的区别
我想你只是把自己弄糊涂了。你说的是对的“ham”是索引0,它取代了“{0}”。因此,
{monit},{0}和{food}
->{monit},ham和{food}
“我将‘ham’解释为在索引0处填充格式位置标记”-不,它在占位符中填充了一个0。看看吧。我开始在这个混乱的小隧道的尽头看到了曙光;我最初的想法是字符串“ham”将出现在最终产品的索引0处,或输出的字符串。从OP所指出的,{0}似乎只是第0个未命名参数。我想你只是把自己弄糊涂了。你说的是对的“ham”是索引0,它取代了“{0}”。因此,{monit},{0}和{food}
->{monit},ham和{food}
“我将‘ham’解释为在索引0处填充格式位置标记”-不,它在占位符中填充了一个0。看看吧。我开始在这个混乱的小隧道的尽头看到了曙光;我最初的想法是字符串“ham”将出现在最终产品的索引0处,或输出的字符串。从OP所指出的,{0}似乎只是zeroeth未命名参数。zeroeth未命名参数解释帮助我理解。非常感谢。现在我回想起来,这本书确实说过这个例子同时使用了关键字和位置。非常感谢。现在我回想起来,这本书确实说过这个例子使用了关键字和位置。