python:在格式化字符串时有一个默认值(str.format()方法)



在进行字符串格式化时是否有默认值?例如:

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结合起来单独覆盖。

例子:

  1. 与默认的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.

  2. 结合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))

相关内容

  • 没有找到相关文章

最新更新