为什么我不能使用"+"在打印功能中添加'int'到'str'?


print ("hello"+"world)

print ("hello"
+"world")

将输出为:

你好世界

但是,当我尝试使用"+"将变量(int(与"str"一起插入打印函数时,会出现错误。但是,当我使用"时,它是为工作而设计的。即:

x=1
print("the value of 'x' is " + x + ".")

它显示错误

TypeError:只能将str(而不是"int"(连接到str

但当我使用时:

print("the value of 'x' is ",x,".")

我得到了想要的输出。

我想知道为什么python是这样设计的,在这种情况下使用"+"有什么意义。谢谢。

编辑:感谢您的回复,因为在Java+中,这意味着简单地组合在一起。

将此操作视为"print函数中的+"是错误的心理模型。这里有两个完全独立的操作:

  • CCD_ 3知道它需要导出一个字符串来显示它
  • CCD_ 4,其对其结果的后续使用一无所知

Python中的函数(以及通过扩展方法和运算符(不是返回类型多态的,这是一种奇特的说法,表示函数不知道期望它们输出什么类型。仅仅因为+用于导出要打印的参数,并不能告诉它字符串是所需的结果。

操作:str + :int没有定义好的输出类型。什么是"1" + 1?是2"11"11还是其他什么?对于这两种类型没有明确的答案,因此Python始终提出TypeError结果是否最终用于print是无关紧要的

相反,print用于将其参数的字符串表示写入流。每个参数最终都必须产生一个字符串并写入流中。操作print(:str, :int)不需要连接strint,它可以分别转换为str并立即写入。

print()只是一个函数,它的设计方式是接受可变数量的位置参数,并在内部将其转换为str.

正如你在这里看到的文档:

打印(*对象,sep='',end='n',file=sys.stdout,flush=False(

All non-keyword arguments are converted to strings like str() does和写入流,用sep分隔,后跟end。两个sep和end必须是字符串;它们也可以是None,这意味着使用默认值。若并没有给出对象,print((将只写结束

执行print("the value of 'x' is ",x,".")时,将向函数传递3个不同的参数,该函数将获得objects。并且它们被转换为字符串,如上所述。

然而,在print("the value of 'x' is " + x + ".")行中,您试图连接值并作为SINGLE参数传递,由于连接操作不是一个有效的操作(python没有像javascript那样强制转换不同类型的操作(,因此它在到达打印函数之前就失败了。

最新更新