1

我在 Python 中遇到过这样的行:

print "Let's talk about %s." % my_name

但是,我在 Ruby 中看到了这两个具有等效输出的情况:

print "Let's talk about #{my_name}."

print "Let's talk about %s." % my_name"

是否只有一种方法可以在 Python 中打印同一行?

4

5 回答 5

6

在 Python 中也有几种方法:

print "let's talk about this %s" % my_name
print "let's talk about this {:s}".format(my_name)
print "let's talk about this", my_name

都产生相同的输出。但是,鼓励使用.format方法(自 Python v 2.6 起可用)而不是旧式%(引用3.0 中的新增功能:“ ...仍然支持 % 运算符;它将在 Python 3.1 中弃用并在稍后从该语言中删除。 ")

最后,从 Python v3.x 开始,它print是一个函数,因此所有打印语句都需要().

于 2012-05-30T01:30:37.347 回答
2

在 ruby​​ 中,之间的部分{}是一个表达式。Python 无法以这种方式评估格式字符串中的表达式。

print "Let's talk about #{my_name}."

在表达式只是一个变量的简单情况下,您可以使用

print "Let's talk about %(my_name)s"%{'my_name':my_name}

或此处其他答案中给出的任何其他替代方案。

首选方法是使用 format()。例如。

print "Let's talk about {my_name}".format(my_name=my_name)
于 2012-05-30T02:08:23.230 回答
0

您还可以连接字符串。这不那么 Pythonic 并且使您对输出的最终外观的控制更少,但是一些非程序员似乎发现这更容易阅读(例如,如果您正在讨论特定的计算):

print "Let's talk about " + str( my_name )

str() 函数可能需要也可能不需要,但它允许您添加其他数据类型(如整数)而不会出现 TypeError。

有关 string.format() 与 % 的更多信息,请参阅这篇较早的帖子: Python 字符串格式化:% 与 .format

于 2012-05-30T01:41:38.780 回答
0

除了这里的其他答案之外,还有映射键,我在使用 Python 的生活中花了很长时间才发现它们。

>>> '%(foo)s' % {'foo': 'bar'}
'bar'

看看整个 shebang 的字符串格式化操作

于 2012-05-30T01:46:13.087 回答
0

我的最爱之一是使用字典来获取值:

>>> values = {"name": "john"}
>>> print "Let's talk about {name}".format(**values)
Let's talk about john
于 2012-05-30T02:30:35.103 回答