Python中的变量插值

11 投票
5 回答
23196 浏览
提问于 2025-04-16 03:08

可能是重复的问题:
在Python中打印变量的非Pythonic方式?

在PHP中,你可以这样写:

$fruit = 'Pear';
print("Hey, $fruit!");

但在Python中,你需要这样写:

fruit = 'Pear'
print("Hey, {0}!".format(fruit))

有没有办法让我在字符串中插入变量呢?如果没有,那为什么这样做更符合Python的风格呢?

谁能理解这个引用就加分哦

5 个回答

2

这是对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!
12

你可以用下面的方法来让Python的行为更接近PHP,同时又能保持Python的优雅:

print "Hey", fruit, "!"

在这里,print函数会在每个逗号的地方插入空格。

不过,Python中更常用的写法是:

print "Hey %s!" % fruit

如果你有很多参数想要命名,可以使用字典(dict):

print "Hey %(crowd)s! Would you like some %(fruit)s?" % { 'crowd': 'World', 'fruit': 'Pear' }
7

你现在的做法是很符合Python风格的。你也可以使用一个叫做 locals 的字典。像这样:

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

虽然这样看起来不太符合Python的风格,但这是实现你在PHP格式中相同效果的唯一方法。我建议你还是继续用你现在的做法。

撰写回答