我在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中打印相同的行?
在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起可用)而不是旧式的%
(引用What's New in 3.0:“...仍然支持%运算符;它将在Python 3.1中弃用并从以后的语言。“)
最后,从Python v3.x开始,print
是一个函数,因此所有打印语句都需要()
。
在红宝石中,{}
之间的部分是一个表达。 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)
你也可以连接字符串。这不是pythonic,并且让你对输出的最终外观控制较少,但是一些非程序员似乎发现这更容易阅读(就像你正在讨论一个特定的计算):
print "Let's talk about " + str( my_name )
str()函数可能是必需的,也可能不是必需的,但它允许您添加其他数据类型(如整数)而不会得到TypeError。
有关string.format()vs%的更多信息,请参阅此旧帖子:Python string formatting: % vs. .format
除了这里的其他答案之外,还有映射键,我花了很长时间才发现在Python的生活中。
>>> '%(foo)s' % {'foo': 'bar'}
'bar'
看看String Formatting Operations整个shebang。
我最喜欢的一个是使用字典值:
>>> values = {"name": "john"}
>>> print "Let's talk about {name}".format(**values)
Let's talk about john