使用占位符

时间:2017-12-20 00:38:15

标签: python string-formatting ternary-operator

是否可以在字符串格式中使用占位符?一个例子可能会显示我的意思:

"some {plural?'people':'person'}".format(plural=True)

应该是"有些人"。基本上,我可以在格式字符串中的两个选项之间切换,而不是直接提供所有值,例如:

"some {plural}".format(plural="people")

这可能听起来有点无用,但用例是许多字符串,其中有几个字可能是多个,这将大大简化代码。

2 个答案:

答案 0 :(得分:2)

使用f-strings

后,可能在Python 3.6之后
plural = True
print(f"some { 'people' if plural else 'person' }")

请注意,a if condition else b是一个Python表达式,而不是f字符串功能,因此您可以在任何需要的位置使用'thing' if plural else 'things',而不仅仅是在f字符串中。

或者,如果你有一个复数函数(可能只是dict查找),你可以这样做:

print(f"{ pluralize('person', plural) }")

答案 1 :(得分:1)

您可以使用三元组:

plural = False
>>> print("some {people}".format(people='people' if plural else 'person'))
some person

您还可以创建一个字典,其中包含可以通过布尔值访问的单数和复数单词的元组对。

irregulars = {
    'person': ['person', 'people'],
    'has': ['has', 'have'],
    'tooth': ['tooth', 'teeth'],
    'a': [' a', ''],
}

plural = True
words = [irregulars[word][plural] for word in ('person', 'has', 'a', 'tooth')]
print('some {} {}{} crooked {}'.format(*words))

plural = False
words = [irregulars[word][plural] for word in ('person', 'has', 'a', 'tooth')]
print('some {} {}{} crooked {}'.format(*words))

# Output:
# some people have crooked teeth
# some person has a crooked tooth