我看到了“为什么join()不会自动将其参数转换为字符串?”,并且被接受的答案让我想到:
显式优于隐式。
和
错误不应该悄悄地经过。
那么,为什么str.format()
会忽略附加/未使用的(有时是意外传递的)参数?对我来说,这似乎是一个悄悄传递的错误,而且它肯定不是显式的:
>>> 'abc'.format(21, 3, 'abc', object(), x=5, y=[1, 2, 3])
'abc'
这实际上导致我的朋友使用os.makedirs(path, exist_ok=True)
时仍然会出现错误,即使 os.makedirs()
的文档说即使path
已经存在,exist_ok=True
也不会引发错误。
事实证明,他只是有一条很长的包含嵌套函数调用的代码行,并且exist_ok
被传递到了嵌套的 .format()
调用中,而不是os.makedirs()
。
'{6} {3}'.format(*range(100))
?或者是:'Hi {name} your favourite colour is {colour}'.format(name='Bob', colour='blue', age=21, planet='Earth')
? - Jon Clementsname
和colour
,我认为将age
和planet
传递给它是一个错误。正如提到的那样,“错误不应该悄悄地通过”。错误也会强制你明确你的语句。 - Markus Meskanenperson
的字典,我要基于其中的某些元素简单地打印一个字符串,那么我应该负责子集化该字典以匹配我的格式吗?这是一个疯狂的要求 - 或者你认为人们真的喜欢做.format(name=person['name'], colour=['person'])
吗? - Jon Clements