首先回答一般性问题,您通常会使用打印功能在脚本中将信息输出到屏幕上,以确保您得到了预期的结果。
随着代码变得更加复杂,您可能会发现记录日志比打印更好,但这是另一个答案的信息。
打印和Python解释器中交互会话中回显的返回值表示之间有很大的区别。打印应该打印到标准输出。表达式的返回值的回显表示(如果不是None
,则会在Python shell中显示),当在等效的脚本代码中运行时,将保持沉默。
1. 打印
在Python 2中,我们有打印语句。在Python 3中,我们得到了一个打印函数,我们也可以在Python 2中使用它。
逗号分隔的打印语句 (Python 2)
使用逗号分隔项的打印语句,使用空格将它们分开。尾部逗号将导致附加另一个空格。没有尾部逗号将导致一个换行符被附加到您要打印的项后面。
您可以将每个项放在单独的打印语句中,并在每个项后面使用逗号,它们将打印相同的内容,在同一行上。
例如(这仅适用于脚本,在交互式shell中,您会在每一行后面得到一个新提示符):
x = "Hello"
y = "World"
print "I am printing",
print x,
print y
将输出:
I am printing Hello World
打印函数
Python 3中内置了print函数,也可以在Python 2.6和2.7中通过以下导入使用:
from __future__ import print_function
你可以声明分隔符和结束符,这使得我们拥有更多的灵活性:
>>> print('hello', 'world', sep='-', end='\n****\n')
hello-world
****
>>>
默认值为
' '
(用于分隔)和
'\n'
(用于结束):
>>> print('hello', 'world')
hello world
>>>
2. 字符串拼接
拼接会在内存中创建每个字符串,然后将它们在其末尾合并成一个新的字符串(这可能不太友好),然后同时将它们打印到输出。当你需要将其他地方构造的字符串连接在一起时,这很有用。
print('hello' + '-' + 'world')
会打印出来
hello-world
在尝试将其他类型的文字直接加入字符串之前,请先将这些文字转换为字符串。
print('here is a number: ' + str(2))
打印
here is a number: 2
如果您尝试将整数连接起来而不先将其强制转换为字符串:
>>> print('here is a number: ' + 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
这应该证明你只应该尝试连接已知为字符串的变量。下一个演示的新格式处理了此问题。
3. 字符串插值
你正在展示的格式化是从C中借鉴的旧式字符串插值方式。它采用旧字符串并一次创建新字符串。它的功能非常简单直接。当您需要构建相当大的模板时(在3行以上和3个以上的变量时,绝对应该使用此方法)时,您应该使用它。
现在的做法是这样的(使用参数的索引):
print('I am printing {0} and {1}'.format(x, y))
或者在Python 2.7或3中(使用隐含索引):
print('I am printing {} and {}'.format(x, y))
或者使用命名参数(这在语义上很容易理解,但代码看起来不太符合DRY原则(即不要重复自己))
print('I am printing {x} and {y}'.format(x=x, y=y))
相对于未在此处演示的%
样式格式化,这种方法最大的好处是可以将位置和关键字参数组合在一起。
print('I am printing {0} and {y}'.format(x, y=y))
Python 3.6中的新特性:格式化字面量
Python 3.6将引入格式化字面量,具有更优雅的语法(减少了冗余)。简单的语法看起来像这样:
print(f'I am printing {x} and {y}')
格式化字面量实际上可以在原地执行代码:
>>> print(f'I am printing {"hello".capitalize()} and {"Wo" + "rld"}')
I am printing Hello and World
str.join()
,并且它对于大量小字符串的连接比拼接更高效。 - Kevin