Python 到底是强类型还是弱类型?

文章讨论了Python被视作强类型还是弱类型的争议,指出Python虽不进行数据类型隐式转换,但其变量类型不固化,属于动态类型。作者强调了区分强弱类型的关键在于实例类型是否可被隐式转换,以及类型系统的严格程度。
摘要由CSDN通过智能技术生成

Python 到底是强类型还是弱类型?

强类型观点:

  • Python 不进行数据类型隐式转换

弱类型观点:

  1. Python 变量无需类型声明、变量类型不固化、函数返回值不确定类型
  2. “abc” * 10 合法
  3. Python 可以支持类型隐式转换(向上兼容),但不可以固化变量类型(无法向上兼容),因此应该用“不可变的特性”:变量类型固化与否,而非“是否支持隐式类型转换”,作为区分强弱类型语言的特征。

个人观点:

  • 当引入动/静态类型的概念——变量类型不固化
  • 那么强/弱类型的概念就会缩小到——实例类型不固化(其实实例类型必定固化,只是实例可能会被语言内核认为等价的其它类型的实例替换,也即隐式类型转换)

    若 强/弱类型 与 动/静态类型 概念隔离,Python确实可以算强类型,因为Python确实不支持隐式类型转换。

  1. 变量无需类型声明、变量类型不固化、函数返回值不确定类型,属于动态类型特征。
  2. “abc” * 10,语义上和过程中都没有涉及类型转换,可以算作运算符重载实现的特定功能。
  3. 很明显,任何特性从严格到宽松,都是可以向上兼容的;从宽松到严格,都是不可以向上兼容的。比如说,已经支持隐式类型转换的语言,若不再支持,势必也变成了新语言。这样说“是否支持隐式类型转换”也属于“不可变特性”,用“是否支持隐式类型转换”作为区分强弱类型的语言的特征是可以的。

    通过第三点可以知道弱类型观点中“不可变特性”的区分方法就是不恰当的,其关键在于特性不可以从宽松到严格。
    这同时提醒我们:当“动/静态类型”概念未出现,或者说,当把“强/弱类型”的概念扩展到广义上——类型系统严格与否——那么Python就属于弱类型。
    对比JS,JS不仅不固化变量类型,同时还会对数据类型作隐式转换,完全的弱类型无疑。但是对比C、Java,Python无需类型声明、变量类型不固化、函数返回值不确定,甚至还默认带有多类型运算符重载,则Python的类型系统不严格,也属于“弱类型”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值