43

在 Python 中,写起来很乏味:

print "foo is" + bar + '.'

我可以在 Python 中做这样的事情吗?

print "foo is #{bar}."

4

9 回答 9

62

Python 3.6+ 确实有变量插值 -f在你的字符串前面加上一个:

f"foo is {bar}"

对于低于此的 Python 版本(Python 2 - 3.5),您可以使用str.format传入变量:

# Rather than this:
print("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})
于 2012-08-03T02:41:08.753 回答
28

蟒蛇 3.6会有使用f-strings进行文字字符串插值

print(f"foo is {bar}.")
于 2016-05-14T10:37:08.973 回答
11

Python 3.6引入了 f-strings

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

老答案:

自 3.2 版以来,Python 与str.format_mapwhich 一起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
>>> 
于 2014-03-21T08:25:28.220 回答
8

我从Python Essential Reference中学到了以下技术:

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

当我们想要在格式化字符串中引用许多变量时,这非常有用:

  • 我们不必再次重复参数列表中的所有变量:将其与基于显式关键字参数的方法(例如"{x}{y}".format(x=x, y=y)and "%(x)%(y)" % {"x": x, "y": y})进行比较。
  • 如果参数列表中变量的顺序与它们在格式化字符串中的顺序一致,我们不必一一检查:将其与基于位置参数的方法(例如"{}{}".format(x, y),"{0}{1}".format(x, y)"%s%s" % (x, y))进行比较。
于 2012-08-03T02:47:49.157 回答
5

字符串格式

>>> bar = 1
>>> print "foo is {}.".format(bar)
foo is 1.
于 2012-08-03T02:38:22.410 回答
2

我更喜欢这种方法,因为您不必通过两次引用变量来重复自己:

阿尔法 = 123
print '答案是 {alpha}'.format(**locals())
于 2012-08-03T02:55:48.900 回答
2

这在 Ruby 中有很大的不同:

print "foo is #{bar}."

这些在 Python 中:

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

在 Ruby 示例中,bar评估
在 Python 示例中,bar只是字典的键

如果您只是使用变量,则行为或多或少是相同的,但总的来说,将 Ruby 转换为 Python 并不是那么简单

于 2012-08-03T02:56:47.993 回答
0

是的,一点没错。在我看来,Python 对字符串格式化、替换和运算符有很好的支持。

这可能会有所帮助:
http ://docs.python.org/library/stdtypes.html#string-formatting-operations

于 2012-08-03T02:36:46.760 回答
-1

几乎所有其他答案都对我不起作用。可能是因为我在 Python3.5 上。唯一有效的是:

 print("Foobar is %s%s" %('Foo','bar',))
于 2018-07-28T18:12:18.583 回答