python到底是强类型语言,还是弱类型语言?

本文探讨了编程语言中强弱类型的定义,澄清了动静类型的混淆。通过对Python、JavaScript、C++等语言的实例分析,阐述Python为何被视为强类型语言,强调强类型并非完全排除隐式类型转换,而是限制不合理的类型转化,防止untrapped errors。此外,还讨论了如何正确理解和应用强弱类型概念。
摘要由CSDN通过智能技术生成

1、动静类型与强弱类型

很多读者应该都熟悉动态类型与静态类型,但是很多人也会把它们跟强弱类型混为一谈,所以我们有必要先作一下概念上的澄清。

这两组类型都是针对于编程语言而言的,但关注的核心问题不同。

对于“动静类型”概念,它的核心问题是“什么时候知道一个变量是哪种类型”?

一般而言,在编译期就确定变量类型的是静态类型语言,在运行期才确定变量类型的则是动态类型语言。

例如,某些语言中定义函数“int func(int a){…}”,在编译时就能确定知道它的参数和返回值是 int 类型,所以是静态类型;而典型如 Python,定义函数时写“def func(a):…”,并不知道参数和返回值的类型,只有到运行时调用函数,才最终确定参数和返回值的类型,所以是动态类型

对于“强弱类型”概念,它的核心问题是“不同类型的变量是否允许隐式转化”?

一般而言,编译器有很少(合理)隐式类型转化的是强类型语言,有较多(过分)隐式类型转化的是弱类型语言。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

例如,Javascript 中的 “1000”+1会得到字符串“10001”,而 “1000”-1则会得到数字 999,也就是说,编译器根据使用场合,对两种不同类型的对象分别做了隐式的类型转化,但是相似的写法,在强类型语言中则会报类型出错。(数字与字符串的转化属于过分的转化,下文会再提到一些合理的转化。)

按照以上的定义,有人将常见的编程语言画了一张分类图:

按强弱类型维度划分,可以归纳出:

强类型:Java、C#、Python、Ruby、Erlang(再加GO、Rust)……弱类型:C、C++、Javascript、Perl、PHP、VB……2、过去的强弱类型概念

动静类型的概念基本上被大家所认可,然而,强弱类型的概念在问答社区、技术论坛和学术讨论上却有很多的争议。此处就不作罗列了。

为什么会有那么多争议呢?

最主要的原因之一是有人把它与动静类型混用了。

最明显的一个例子就是 Guido van Rossum 在 2003 年参加的一个访谈,它的话题恰好是关于强弱类型的(Strong versus Weak Typing):

但是,他们谈论的明显只是动静类型的区别。

访谈中还引述了 Java 之父

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值