То, как вы это делаете сейчас, это питонический способ. Вы также можете использовать словарь locals. Вот так:
>>> fruit = 'Pear'
>>> print("Hey, {fruit}".format(**locals()))
Hey, Pear
Это выглядит не очень питоническим, но это единственный способ добиться того же эффекта, что и при форматировании PHP. Я бы просто придерживался того, как вы это делаете.
Самое близкое к поведению 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' }
Небольшая адаптация из примера 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!
Не делайте этого. Это непитонично. Например, когда вы добавляете переводы в свое приложение, вы больше не можете контролировать, какие переменные используются, если только вы сами не проверите все файлы переводов.
Например, если вы измените локальную переменную, вам придется изменить ее и во всех переведенных строках.
Что-то вроде этого должно работать:
"%(fruit)s" % locals()