甲壳虫|python到底是强类型语言,仍是弱类型语言?( 四 )


本文为了利便理解 , 使用这个主要特征来划分强弱类型 , 但是要夸大 , 强类型不是没有隐式类型转换 , 而是可能有很少且公道的隐式类型转换 。
(2)如果有其它解释器令 Python 支持广泛的隐式类型转换 , 那 Python 仍是强类型语言么?
语言的标准规范就像是法律 , 而解释器是执法者 。 假如有错误的执法解释 , 那法律仍是那个法律 , 应该改掉错误的执法行为;假如是法律本身有题目(造成了解释歧义和矛盾 , 或者该废弃) , 那就应该修改法律 , 保证它的确定性(要么是强类型 , 要么是弱类型) 。
(3)为什么说 Javascript 是弱类型?
由于它的隐式类型转换非常多、非常复杂、非常过分!好比 , Javascript 中123 + null结果为 123 , 123 + {}结果为字符串“123[object Object]” 。
另外 , 它的双等号“==”除了有基本的比较操纵 , 还可能发生多重的隐式类型转换 , 例如true==["2"]判定出的结果为 false , 而true==["1"]的结果是 true , 还有[]==![]和[undefined]==false的结果都为 true……
(4)C++ 是不是弱类型语言?
前文提到《流畅的Python》中将 C++ 归为强类型 , 但实际上它应该被归为弱类型 。 C++ 的类型转换是个非常复杂的话题 , @樱雨楼 小姐姐曾写过一个系列文章做了系统论述 , 文章地址:如何攻克 C++ 中复杂的类型转换?、详解 C++ 的隐式类型转换与函数重载!、谁说 C++ 的强制类型转换很难懂?
6、小结
强弱类型概念在网上有比较多的争议 , 不仅在 Python 是如斯 , 在 C/C++ 之类的语言更甚 。
实在在学术上 , 这个概念早已有明确的定义 , 而且事实上也被许多人所接纳 。
那些反对的声音大多是因为概念混用 , 由于他们忽略了另一种对语言进行分类的维度;同时 , 还有一部分值得注意的原因 , 即不能以为强类型即是“完全无隐式类型转换”或“只要没有xxx隐式类型转换” 。
本文先容了社区中对python 的主流分类 , 同时对几类疑似隐式类型转换的用法进行了分析 , 论证出它是一种强类型语言 。
【甲壳虫|python到底是强类型语言,仍是弱类型语言?】


推荐阅读