Как использовать Python для простого расширения переменных в строки?
Какая приятная идиома для этого:
Вместо:
print "%s is a %s %s that %s" % (name, adjective, noun, verb)
Я хочу, чтобы иметь возможность сделать что-то в силу:
print "{name} is a {adjective} {noun} that {verb}"
Ответ 1
"{name} is a {adjective} {noun} that {verb}".format(**locals())
locals() дает ссылку на текущее пространство имен (как словарь).
**locals() распаковывает этот словарь в аргументы ключевых слов (f(**{'a': 0, 'b': 1}) is f(a=0, b=1)).
.format() "новое форматирование строк" , которое может кстати сделать намного больше (например, {0.name} для имени атрибут первого позиционного аргумента).
В качестве альтернативы string.template (опять же, с локалями, если вы хотите избежать избыточного литерала {'name': name, ...} dict).
>>> 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
Для python 2 do:
print name,'is a',adjective,noun,'that',verb
Для python 3 добавьте parens:
print(name,'is a',adjective,noun,'that',verb)
Если вам нужно сохранить его в строке, вам придется объединиться с оператором +, и вам придется вставлять пробелы. print вставляет пробел во все ,, если в конце параметров нет конечной запятой, и в этом случае он отказывается от новой строки.
Чтобы сохранить в строку var:
result = name+' is a '+adjective+' '+noun+' that '+verb