在Python 3.4中如何将字符串和整数拼接?

5
我是一个新手,正在学习Python,所以一直在进行一些练习,以便开始记忆基本函数和语法。
我使用 PyCharm IDE 和 Python 3.4。在进行一些基本的字符串和整数连接练习时,我遇到了问题。下面的每个实例都会抛出一个不支持的操作数类型错误。Stack Overflow 上有几个主题清楚地说明了正确的连接语法,但上述错误消息仍然困扰着我。
print ("Type string: ") + str(123)
print ("Concatenate strings and ints "), 10
6个回答

11
在Python 3+中,print是一个函数,因此必须使用括号将其参数括起来进行调用。因此,看看您的示例:
print ("Type string: ") + str(123)

实际上与以下相同:

var = print("Type string: ")
var + str(123)

由于print没有返回值(在Python中,这意味着None),所以这等同于:

None + str(123)

显然这会导致一个错误。

关于你尝试做的事情,可以说你想要做的事很简单:传递print函数所需打印的内容,这可以通过多种方式完成:

print ("Type string: " + str(123))

# Using format method to generate a string with the desired contents
print ("Type string: {}".format(123)) 

# Using Python3's implicit concatenation of its arguments, does not work the same in Python2:
print ("Type string:", str(123)) # Notice this will insert a space between the parameters

6
请注意,在Python 3中print是一个函数。在Python 2中,你的第一行代码将连接“Type string:”和“123”,然后打印它们。但在Python 3中,你使用一个参数调用print函数,该函数返回None,然后你再将“123”添加到它上面。这没有任何意义。
第二行代码在Python 2或3中都不会生成错误(我已经测试了2.7.7和3.2.3版本)。在Python 2中,你会得到“Concatenate strings and ints 10”的输出;而在Python 3中,你的脚本只会打印“Concatenate strings and ints”。这是因为print是一个函数,所以你需要使用参数“Concatenate strings and ints”来调用它。逗号和数字10将你的行变成了print函数的返回值(即None)和数字10的元组。由于你没有对该元组进行任何操作,因此没有任何可见效果。

谢谢您的回复。昨天我开始学习Python 2.7,今天决定直接从最新版本开始。 - apt-get
1
是的,Python 2和3之间存在一些差异,这也是Python 2今天仍在使用的原因。Python维基百科上有一个页面专门介绍此问题。就学习而言,版本并不重要,只需选择一种版本即可。如果您需要立即为特定项目使用Python 2,请使用Python 2的学习材料;否则,请坚持使用Python 3。一旦您掌握了该语言,如有需要,您可以轻松地学习两个版本之间的区别。 - Carsten

3

试试使用format()函数:

print("Type string: {}".format(123))
print("Concatenate strings and ints {}".format(10))

真的吗?这个语法只适用于Python v3.4吗?在2.7中更方便。 - apt-get
这个语法在2.7版本中也存在。旧的做法是 print("Hello %s" % "world") - gitaarik
1
这通常是连接或多个 print 参数的更好选择,部分原因是它避免了提问者的问题出现的可能性...但如果没有解释为什么更好,那么在这里它并不是一个很好的答案。 - abarnert

2

这没什么问题:

print ("Type string: ") + str(123)

print只是像其他函数一样的一个函数。而你正在使用一个参数"Type string: "调用该函数,然后尝试将结果(将会是None)添加到字符串'123'中。那是行不通的。如果你想要将这两个字符串相加,你必须将它们放入同一个表达式中,在括号内:

print("Type string: " + str(123))

同样地:
print ("Concatenate strings and ints "), 10

这段代码调用了print函数并传递了一个参数,然后将print函数返回的None和数字10打包成一个元组。如果你想将数字10传递给print函数,它必须放在括号里面:

print("Concatenate strings and ints ", 10)

gitaarik的回答所指出的那样,使用str.format更加灵活,避免了出现类似这样的问题。它还提供了同样在Python 2.6-2.7和Python 3.x中工作的代码,即使你不是尝试编写双平台/单代码库代码,它也是相当好的,因为它将被只知道其中一个语言的人理解。请注意保留HTML标签。

1

我认为这是在Python中连接字符串和整数的一种很酷的方式:

print (f"Type string: {123}")
print (f"Concatenate strings and ints {10}")

需要解释一下。 - Peter Mortensen

-1
你可以这样做:
c = 'Emerson'
d = 32
print("My name is %s and I am %d years old." %(c,d))

结果:

我的名字是艾默生,我今年32岁。


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