从字面上说,是的,可以使用
str.format
无参数:
>>> 'asdf'.format()
'asdf'
如果您想为所有内容传递空字符串,那么使用位置替换字段是不可能的。使用命名替换字段和
format_map
:
>>> class Defaults(object):
... def __getitem__(self, key):
... return ''
...
>>> 'asdf {a} fdsa {b}'.format_map(Defaults())
'asdf fdsa '
collections.defaultdict(str)
而不是编写我们自己的类,但是对于这个用例,我不喜欢
defaultdict
将不必要地填充(默认)dict。
如果您真的想使用位置替换字段,那么最好传递大量参数,并希望每个字段都有足够的参数。
str.format格式
>>> 'asdf {} fdsa {}'.format(*['']*100)
'asdf fdsa '
如果你同意使用稍微不同的格式API,
string.Formatter
import string
class MyFormatter(string.Formatter):
def get_value(self, key, args, kwargs):
# Yes, no * or ** on args or kwargs. That's what the signature looks like.
try:
return super(MyFormatter, self).get_value(key, args, kwargs)
except (IndexError, KeyError):
return ''
演示:
>>> MyFormatter().format('asdf {} fdsa {}')
'asdf fdsa '