print()不能将内容连接成字符串。

3

我正在进行以下操作:

print( 'Sent email', i+1 )

然而,它并没有像我期望的那样打印出“Sent email 1”,而是打印了一个列表:
('Sent email', 1)

任何原因导致它没有将这两个参数连接成一个字符串吗?
编辑:我在Windows上使用Python 3.3.2。
>>> import sys;print(sys.version)
3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)]

1
我之前没有提到,但我正在使用Python 3.3.2。此外,“print()”语法在2.7中也是有效的。 - void.pointer
2
你确定要使用py3吗?import sys;print(sys.version)会输出什么? - georg
@thg435,我已经编辑了我的问题,包括您的请求结果。 - void.pointer
2个回答

4

print是py2.x中的语句:

>>> i =0
>>> print 'Sent email', i+1 
Sent email `1

在它周围添加()实际上会打印一个元组。

您还可以导入py3.x print函数:

>>> from __future__ import print_function
>>> print ('Sent email', i+1)
Sent email 1

我正在使用Python 3.3.2,所以这不适用于我。 - void.pointer
@RobertDailey 你说的在Python3.x中是不可能的,除非你这样做:print(('Sent email', i+1)) - Ashwini Chaudhary
2
将您标记为答案,因为我发现愚蠢的“注册扩展”仍然安装在Python 2.7.5上(也安装在我的系统上),即使我告诉它不要安装,所以我不知道它实际上并没有安装到我的Python3。谢谢! - void.pointer
1
@AshwiniChaudhary,是我。我真的很喜欢你的回答,但我觉得既然OP正在处理Python 3,那么这个回答就不适合这个问题,除了信息量之外。然而,在@RobertDailey发现“注册扩展”(说实话,我甚至不知道那是什么!)的情况下,谈论print语句的工作原理是有意义的。只要未来的观众能看到OP的发现,那么我认为这个答案就完全没问题了。因此,我取消了我的踩。 - 2rs2ts
1
@2rs2ts 即使我不是一个Windows专家,所以我也不知道"register extensions"是什么意思。感谢你的诚实。 :) - Ashwini Chaudhary

3

试试这个:

print('Sent email ' + str(i+1))

当运行 Python 2.x 时,也可以使用以下代码:

print 'Sent email', i+1

3
不需要我做出冗余的回答。原因是 print() 函数默认你要打印的是一个包含字符串和整数的元组,因为 i+1 是整数。如果你把 i+1 转换成字符串,那么逗号的意义就会改变。 - 2rs2ts
@2rs2ts 我之前认为print语句会自动将类型转换为字符串。但是根据文档的描述:print 会按顺序计算每个表达式的值,并将结果写入标准输出(参见下文)。如果某个对象不是字符串,就会使用字符串转换规则将其转换为字符串。详细信息请参考:http://goo.gl/KUOgT - void.pointer
@RobertDailey 我认为在这种情况下,表达式会被视为元组。如果你说 a = 1,2 然后 print a,你会得到 (1, 2),虽然也许我想错了。 - 2rs2ts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接