Python中的变量插值
可能是重复的问题:
在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格式中相同效果的唯一方法。我建议你还是继续用你现在的做法。