4 ms·
The new-style formatting allows that as well: >>> "{name} has {count} {thing}".format( thing='bananas', count=10, name='Phil') 'Phil has 10 b
by andolanra 14y ago
The new-style formatting allows that as well:
>>> "{name} has {count} {thing}".format(
thing='bananas', count=10, name='Phil')
'Phil has 10 bananas'
It also allows for more complex expressions inside of format specifiers, so if you need to grab data out of an object, you can do something like:
>>> from collections import namedtuple
>>> Sentence = namedtuple('Sentence', ['name', 'thing', 'count'])
>>> s = Sentence(name='Phil', thing='bananas', count=10)
>>> '{dat[0]} has {dat.count} {dat.thing}'.format(dat=s)
'Phil has 10 bananas'
which is verbose and contrived here, but could be immensely useful in cases like
>>> '... {numeral[5]} {item.plural}'.format(
numeral=fr_numerals, item=animal)
'... cinq animaux'
- 286c8cb04bda 14y agoHow do you handle it when you need to convert, e.g., "American woman" to "femme américaine"?
- andolanra 14y agoYou use something else. It's still just a format string, not a whole localization solution. Named arguments means it might be easier to hack together something like templates = {'en': '{adj} {noun}', 'fr': '{noun} {adj}'} print(templates['fr'].format(noun='fromage', adj='délicieux') but that's still a hack, and doesn't even come close to addressing cases like Chinese's "{adj} {counter_word[noun]} {noun}" or gender concord or any of the myriad other things you come across in practice. Edit: used 'positional' instead of 'named'.