繁体   English   中英

为什么 python 不能连接字符串和 int

[英]Why can't python concatenate a string and int

Python 是一种非常易于使用的语言,但我经常遇到我遇到的问题

x = "hello world = " + 42

为什么 python 不能内置 function 来自动将 42 转换为字符串以避免这种情况:

x = "hello world = " + str(42)

在这么多层次上 python 写代码很短,但是在这里我们开发者不得不花费额外的精力。

对于 python 语言的这个设计规则,在低级 python 解释器方面是否有任何技术原因,给出了这样的具体原因?

简而言之,因为 Python 是强类型的,这意味着它尽可能避免隐式类型转换。 这就是语言哲学的一部分:“显式胜于隐式”和“面对歧义,拒绝猜测的诱惑”。

作为一个优势,这避免了像"1" + 11 + "1"这样的模棱两可的表达式。 结果应该是2还是"11" 它应该取决于哪个先出现还是应该有一种“层次结构”? 另一方面, JavaScript 将两者都评估为"11"


在这种情况下,如果您要打印x ,请改用print ,因为它可以将对象隐式转换为字符串。

print("hello world =", 42)

否则,您可以使用字符串插值:

meaning = 42
x = f"hello world = {meaning}"

或更旧的等价物:

x = "hello world = {}".format(meaning)
x = 'hello world 42' # if 42 is fixed, which is a bit odd

# if 42 is stored in a variable:
number = 42
x = f'hello world = {number}'

关于为什么,简单的版本。 让我们反过来说。

x = 42 + 'foo'

python 现在是否应该以某种方式将“foo”转换为数字以使加法起作用?

现在是长版。 操作 + 由 class 的__add__魔术方法定义。 所以当你调用's' + 's1'你实际上是在调用:

's'.__add__('s1')

所以有一个字符串的 运算符重载,它说加法实际上是连接。 但它不会进行隐式str()转换,因为那会产生误导(参见简单示例)。

但是,您可以为可以做到这一点的字符串制作自己的 class。

Python 在有意义的地方进行隐式类型转换,例如,当添加intfloat时,它会将两者都转换为 float。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM