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

Имеет ли Python аналогичную переменную интерполяцию типа "строка # {var}" в Ruby?

В Python утомительно писать:

print "foo is" + bar + '.'

Можно ли сделать что-то подобное в python?

print "foo is #{bar}."

4b9b3361

Ответ 1

Python не выполняет переменную интерполяцию - он явный, а не неявный.

Однако вы можете использовать str.format для передачи в переменных:

# Rather than this:
puts "foo is #{bar}"

# You would do this:
print "foo is {}".format(bar)

# Or this:
print "foo is {bar}".format(bar=bar)

# Or this:
print "foo is %s" % (bar, )

# Or even this:
print "foo is %(bar)s" % {"bar": bar}

Ответ 3

Я изучил следующий метод из Python Essential Reference:

>>> bar = "baz"
>>> print "foo is {bar}.".format(**vars())
foo is baz.

Это очень полезно, когда мы хотим ссылаться на многие переменные в строке форматирования:

  • Нам не нужно снова повторять все переменные в списке аргументов: сравните его с явными подходами на основе аргументов на основе ключевых слов (например, "{x}{y}".format(x=x, y=y) и "%(x)%(y)" % {"x": x, "y": y}).
  • Нам не нужно проверять один за другим, если порядок переменных в списке аргументов соответствует их порядку в строке форматирования: сравните его с позиционными аргументами (например, "{}{}".format(x, y), "{0}{1}".format(x, y) и "%s%s" % (x, y)).

Ответ 4

Python 3.6 представил f-строки:

print(f"foo is {bar}.")

Старый ответ:

Начиная с версии 3.2 Python имеет str.format_map, который вместе с locals() или globals() позволяет быстро выполнять:

Python 3.3.2+ (default, Feb 28 2014, 00:52:16) 
>>> bar = "something"
>>> print("foo is {bar}".format_map(locals()))
foo is something
>>> 

Ответ 6

В Ruby существует большая разница:

print "foo is #{bar}."

И это в Python:

print "foo is {bar}".format(bar=bar)

В примере Ruby оценивается bar В примере на Python bar является всего лишь ключом к словарю

В том случае, если вы просто используете переменные, они ведут себя более или менее одинаково, но в целом преобразование Ruby в Python не так просто

Ответ 7

Я предпочитаю этот подход, потому что вам не нужно повторять себя, дважды ссылаясь на переменную:

alpha = 123
print 'The answer is {alpha}'.format(**locals())