3 ms·
Python supports `"%(name)s"`, which means you're not dependent on order at all -- in my opinion, much nicer than indexing into the parameter list: >>> "%(nam
by andrewaylett 15y ago
Python supports `"%(name)s"`, which means you're not dependent on order at all -- in my opinion, much nicer than indexing into the parameter list:
>>> "%(name)s has %(count)d %(thing)s" % {'thing': 'bananas', 'count': 10, 'name': "Phil"}
'Phil has 10 bananas'
- dalke 15y agoI found that I often (~1 time in 10) make a mistake with that syntax, and omit the trailing 's'. I think it's because I'm not used to having anything after a closing ')'.
- mturmon 15y agoSame problem here. Maybe the braces approach using {name} is an improvement upon %(name)s in that respect.
- andolanra 15y agoThe 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 15y agoHow do you handle it when you need to convert, e.g., "American woman" to "femme américaine"?
- andolanra 15y 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'.