为什么说 Python 是强类型语言?

为什么说 Python 是强类型语言?

没有为什么, 都人云亦云, xjb 传, 自己都不知道自己在说什么.

建议直接删除强弱类型这个概念, 改用定义更明确的概念, 比如 sound.

国外 SO 和 PLD 社区也是这个观点, 这东西实在 ill defined, 别用!!!

首先说 well behaved 这一定义的问题.

你要说 Java 由于 "abc" + 123 = "abc123", 这是 ill behavior, 所以是弱类型

那你 Python 支持 1 + 0.1 = 1.1 也是弱类型, 看看隔壁 Rust, 你能 1 + 0.1 吗?

Python 说这是我标准规定的啊, 实际上是 float(1) + 0.1 = 1.1

那 Java 说我这也是标准规定的啊, 实质上是 String s = "abc" + Integer.valueOf(123).toString()

甚至 JavaScript 那堆奇葩结果都是有规范规定的, 这都属于 well behavior, 你不能根据这个说他是弱类型.

好了, 这下弱类型不存在了.

再说 type stability 这一定义的问题.

好吧你 C 中 void* 是弱类型, 那你 Rust 就没指针了? 你 Haskell 就不能 reinterpret 了?

好了, 所有带指针的都是弱类型.

那你 Python 是不是一切皆 Object?

好了, 所有面对对象语言都是弱类型.

而且只要你图灵完备, 你就有的是办法绕过类型系统.

好了, 这下你能用到的语言统统是弱类型了.

所以现在 PLD 主流观点就是别用 strong/weak 这种词, 没人知道你到底想表达什么.

你要讨论类型系统, 好, 那就用 total, sound, complete 这种明确定义的概念, 还有个 safe 也少用.

你要讨论类型转换, 好, 那就用 explicit, implicit, transmute 这些明确的定义.

不管你以前怎么理解 strong/weak type 的, 现在都别用, 赶快把这个词扔进垃圾堆吧.