Python|python到底是强类型语言,还是弱类型语言?
文章图片
文章图片
1、动静类型与强弱类型
很多读者应该都熟悉动态类型与静态类型 , 但是很多人也会把它们跟强弱类型混为一谈 , 所以我们有必要先作一下概念上的澄清 。
这两组类型都是针对于编程语言而言的 , 但关注的核心问题不同 。
对于“动静类型”概念 , 它的核心问题是“什么时候知道一个变量是哪种类型”?
一般而言 , 在编译期就确定变量类型的是静态类型语言 , 在运行期才确定变量类型的则是动态类型语言 。
例如 , 某些语言中定义函数“int func(int a){…” , 在编译时就能确定知道它的参数和返回值是 int 类型 , 所以是静态类型;而典型如 Python , 定义函数时写“def func(a):…” , 并不知道参数和返回值的类型 , 只有到运行时调用函数 , 才最终确定参数和返回值的类型 , 所以是动态类型
对于“强弱类型”概念 , 它的核心问题是“不同类型的变量是否允许隐式转化”?
一般而言 , 编译器有很少(合理)隐式类型转化的是强类型语言 , 有较多(过分)隐式类型转化的是弱类型语言 。
例如 , 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 之父 James Gosling 的话 , 从他的表述中也能看出 , 他说的“强弱类型”其实也是动静类型的区分 。
另外还有一个经典的例子 , C 语言之父 Dennis Ritchie 曾经说 C 语言是一种“强类型但是弱检查”的语言 。 如果对照成前文的定义 , 那他其实指的是“静态类型弱类型” 。
为什么这些大佬们会有混淆呢?
其实原因也很简单 , 那就是在当时还没有明确的动静类型与强弱类型的概念之分!或者说 , 那时候的强弱类型指的就是动静类型 。
维基百科上给出了 1970 年代对强类型的定义 , 基本可以还原成前文提到的静态类型:
In 1974 Liskov and Zilles defined a strongly-typed language as one in which \"whenever an object is passed from a calling function to a called function its type must be compatible with the type declared in the called function.\"[3
In 1977 Jackson wrote \"In a strongly typed language each data area will have a distinct type and each process will state its communication requirements in terms of these types.\"[4
- 美团|大量外卖小哥退出美团,商家也接连退出,今年到底怎么了?
- 秋叶云裳|对话导演林魂:王思聪力推的动画《雾山五行》到底有何与众不同?
- 哥哥环游记|姜子牙生活到底有多惨?,历史上有一位神人却养不起家庭?
- Java|马化腾登顶中国首富,微信、QQ却都免费使用,腾讯到底咋赚钱的?
- 科学家|龙到底存不存在?科学家已经发现,地球上存在“与龙相似”的生物
- 卫星|以前用的“卫星锅”,它到底能看到些什么?怪不得要禁止使用
- 小绿叶子科技|iPhone到底怎么了!为何卖不动真正原因被确认!
- 选择遗忘|让华为稳了的“云手机”到底是怎么回事?
- 空枝|买了NFC读卡器,到底值不值,为了省门禁卡的钱
- 新陈代谢|人类37度历史体温已回不去了?体温呈下降趋势,到底意味着什么