繁体   English   中英

为什么Python在连接字符串时不执行类型转换?

[英]Why does Python not perform type conversion when concatenating strings?

在Python中,以下代码会产生错误:

a = 'abc'
b = 1
print(a + b)

(错误是“TypeError:无法连接'str'和'int'对象”)。

为什么Python解释器在遇到这些类型的串联时不会自动尝试使用str()函数?

问题是转换是不明确的,因为+表示字符串连接数字加法 以下问题同样有效:

为什么Python解释器在遇到这些类型的添加时不会自动尝试使用int()函数?

这正是松散打字的问题,不幸的是折磨了Javascript。

这种操作存在很大程度的模糊性。 假设这种情况:

a = '4'
b = 1
print(a + b)

目前尚不清楚a是否应该被强制转换为整数(导致5 ),或者b是否应该被强制转换为字符串(导致'41' )。 由于类型杂耍规则是可传递的,因此将数字字符串传递给期望数字的函数可能会让您遇到麻烦,尤其是因为几乎所有算术运算符都对字符串进行了重载操作。

例如,在Javascript中,为了确保处理整数而不是字符串,通常的做法是将变量乘以1; 在Python中,乘法运算符重复字符串,因此'41' * 1是无操作。 最好是让开发人员澄清一下。

简短的回答是因为Python是一种强类型语言。

这是Guido做出的设计决定。 它可能是这样或那样的,将strint连接到strint

最好的解释,仍然是圭多给出的,您可以在这里查看

其他答案提供了很好的解释,但没有提到这个功能被称为强类型。 执行隐式转换的语言是弱类型。

因为Python在连接字符串时不执行类型转换。 这种行为是设计使然,当您需要将对象强制转换为字符串或数字时,您应养成执行显式类型转换的习惯。

将您的代码更改为:

a = 'abc'
b = 1
print(a + str(b))

你会看到理想的结果。

Python必须知道字符串中的内容才能正确执行。 有一个模棱两可的案例: '5' + 5应该产生什么? 一个数字还是一个字符串? 那肯定会引发错误。 现在要确定这种情况是否成立,python必须检查要告诉的字符串。 每次尝试连接或添加两个东西时它应该这样做吗? 最好让程序员明确地转换字符串。

更一般地说,像这样的隐式转换只是简单的混乱! 它们难以预测,难以阅读,难以调试。

告诉python int是一个消除'+'操作歧义的列表。

['foo', 'bar'] + [5]

这会返回:['foo','bar',5]

这就是他们决定设计语言的方式。 可能的理由是,要求对字符串进行显式转换会降低意外行为的可能性(例如,如果两个操作数恰好是整数而不是字符串,则为整数加法)。

暂无
暂无

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

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