Подтвердить что ты не робот

Как использовать Python для простого расширения переменных в строки?

Какая приятная идиома для этого:

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

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

4b9b3361

Ответ 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).

Ответ 2

использовать 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

Для 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