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)
不需要连接str
和int
,它可以分别转换为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那样强制转换不同类型的操作(,因此它在到达打印函数之前就失败了。