Интерполяция переменных в Python [duplicate]

9
задан Community 23 May 2017 в 11:46
поделиться

5 ответов

То, как вы это делаете сейчас, это питонический способ. Вы также можете использовать словарь locals. Вот так:

>>> fruit = 'Pear'
>>> print("Hey, {fruit}".format(**locals()))
Hey, Pear

Это выглядит не очень питоническим, но это единственный способ добиться того же эффекта, что и при форматировании PHP. Я бы просто придерживался того, как вы это делаете.

6
ответ дан 4 December 2019 в 12:15
поделиться

Самое близкое к поведению PHP, которое все еще поддерживает ваш Python-zen:

print "Hey", fruit, "!"

print будет вставлять пробелы в каждую запятую.

Более распространенная идиома Python:

print "Hey %s!" % fruit

Если у вас есть масса аргументов и вы хотите назвать их, вы можете использовать dict:

print "Hey %(crowd)s! Would you like some %(fruit)s?" % { 'crowd': 'World', 'fruit': 'Pear' }
11
ответ дан 4 December 2019 в 12:15
поделиться

Небольшая адаптация из примера NamespaceFormatter в PEP-3101 :

import string

class NamespaceFormatter(string.Formatter):
  def __init__(self, namespace={}):
      super(NamespaceFormatter, self).__init__()
      self.namespace = namespace

  def get_value(self, key, args, kwds):
      if isinstance(key, str):
          try:
              # Check explicitly passed arguments first
              return kwds[key]
          except KeyError:
              return self.namespace[key]
      else:
          super(NamespaceFormatter, self).get_value(key, args, kwds)

fmt = NamespaceFormatter(globals())
fruit = 'Pear'

print fmt.format('Hey, {fruit}!')

для:

Hey, Pear!
2
ответ дан 4 December 2019 в 12:15
поделиться

Не делайте этого. Это непитонично. Например, когда вы добавляете переводы в свое приложение, вы больше не можете контролировать, какие переменные используются, если только вы сами не проверите все файлы переводов.

Например, если вы измените локальную переменную, вам придется изменить ее и во всех переведенных строках.

-3
ответ дан 4 December 2019 в 12:15
поделиться

Что-то вроде этого должно работать:

"%(fruit)s" % locals()
1
ответ дан 4 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: