Как я могу использовать Python, чтобы легко развернуть переменные в строки? - PullRequest
12 голосов
/ 30 января 2011

Какая хорошая идиома для этого:

Вместо: print "%s is a %s %s that %s" % (name, adjective, noun, verb)

Я хочу иметь возможность сделать что-то с эффектом: print "{name} is a {adjective} {noun} that {verb}"

Ответы [ 3 ]

21 голосов
/ 30 января 2011
"{name} is a {adjective} {noun} that {verb}".format(**locals())
  • locals() дает ссылку на текущее пространство имен (в виде словаря).
  • **locals() распаковывает этот словарь в аргументы ключевого слова (f(**{'a': 0, 'b': 1}) равно f(a=0, b=1)).
  • .format() - это "форматирование новой строки" , что, кстати, может сделать намного больше (например, {0.name} для атрибута имени первого позиционного аргумента).

В качестве альтернативы, string.template (опять же, с местными жителями, если вы хотите избежать избыточного {'name': name, ...} dict literal).

5 голосов
/ 30 января 2011

использование string.Template

>>> from string import Template
>>> t = Template("$name is a $adjective $noun that $verb")
>>> t.substitute(name="Lionel", adjective="awesome", noun="dude", verb="snores")
'Lionel is a awesome dude that snores'
3 голосов
/ 30 января 2011

Для Python 2 сделать:

print name,'is a',adjective,noun,'that',verb

Для Python 3 добавить парены:

print(name,'is a',adjective,noun,'that',verb)

Если вам нужно сохранить его в строку, вам придется объединить оператор + и вставить пробелы. print вставляет пробел во всех ,, если в конце параметров нет запятой, в этом случае он не переносит символ новой строки.

Для сохранения в строку var:

result = name+' is a '+adjective+' '+noun+' that '+verb
...