python是什么类型的语言、为什么-为什么说 Python 是强类型语言?

强弱定义有学术上的,如果按照题主提到的含义"是否存在隐式转换”来看待的话,其实py和C还是有差别的,不过这个差别得去实现层面去看了,具体说就是,类型的转换是语言本身决定的,还是类型自己决定的

譬如说,支持int和float的混合运算,C就是语言本身决定的,编译器看到你用int和float做加法,就根据规定把int转float,然后做float的加法,这是一种弱类型特性

但是py中并不是这样的,py是动态类型语言,编译器看到a+b,并不知道a和b是什么类型,其实也不需要知道,因为只有运行时才知道它们是什么类型(严格说,是它们"引用的对象”是什么类型,因为py的变量是无所谓类型的),语言上的规定很宽松,就一句话:a+b等同于a.__add__(b),也就是说加法运算是对象的一个方法,由对象自己决定(实际情况稍复杂一点,也可以等同于b.__radd__(a),即正向走不通走反向),所以并不是"隐式类型转换”,而是"a类型能支持以b的类型为参数的加法方法”;而像not转bool,其实也是调用方法,任何对象转bool都是由其本身定义的方法决定,只不过过程更复杂,会先看有没有__nonzero__方法,如果没有就看有没有__len__……,总之是类型自己决定行为的,当然内建类型的行为,语言规范也会定义到,但依然是runtime实现而非编译器介入

所以上面说C有"弱类型特性”,弱类型是一种特性,一个语言也可以同时存在强弱两种特性,用这个判断语言本身其实只是一种大略的说法了,《编译原理》一书甚至有一节论述中认为java也是动态类型语言呢,因为所有对象都可以用Object引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值