在进行字符串格式化时是否有默认值?例如:
s = "Text {0} here, and text {1} there"
s.format('foo', 'bar')
我正在寻找的是为编号索引设置默认值,以便它可以在占位符中跳过,例如一些像这样:
s = "Text {0:'default text'} here, and text {1} there"
我检查了https://docs.python.org/3/tutorial/inputoutput.html#tut-f-strings,没有找到我需要的东西,也许在错误的地方找?
谢谢。
您不能在格式字符串本身中这样做,但是使用命名占位符,您可以将dict
类似的东西传递给包含通用默认值的.format_map
,或者将每个值的默认值的dict
与提供的dict
结合起来单独覆盖。
例子:
-
与默认的
dict
类似的东西:from collections import Counter fmt_str = "I have {spam} cans of spam and {eggs} eggs." print(fmt_str.format_map(Counter(eggs=2)))
输出
I have 0 cans of spam and 2 eggs.
-
结合
dict
的默认值:def format_groceries(**kwargs): defaults = {"spam": 0, "eggs": 0, **kwargs} # Defaults are replaced if kwargs includes same key return "I have {spam} cans of spam and {eggs} eggs.".format(defaults) print(format_groceries(eggs=2))
的行为方式相同。
使用编号占位符,解决方案最终会变得更难看,更不直观,例如:
def format_up_to_two_things(*args)
if len(args) < 2:
args = ('default text', *args)
return "Text {0} here, and text {1} there".format(*args)
本教程并没有深入讨论这个问题,因为现代Python在99%的情况下都在使用f-string,而实际的f-string通常不需要处理这种情况,因为它们处理的是任意表达式,要么工作,要么不工作,没有传递一组不完整占位符给它们的概念。
如果您只需要在位置上插入精确数量的值
作为lambda
meh = lambda x='default x',y='default y': 'Text {0} here, Text {1} here'.format(x,y)
print(meh(3,7))
作为函数
def meh(x='default x',y='default y'):
return "Text {0} here, Text {1}".format(x,y)
print(meh(3,7))