- 首先要清楚静态类型语言和动态类型语言的判别的标准
定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如果类型检查发生在运行阶段(run time),那么是动态类型语言(dynamically typed languages) - 什么是类型检查
类型检查就是查看变量的类型,然后判断这个表达式是合理的,可以这么理解:编译器通常在编译阶段做类型检查(java),而解释器通常在运行阶段做类型检查(python) - 静态类型(static)语言: 所有的变量类型必须被显示地声明,因为这些信息在编译阶段就被需要。例如,在 Java 中
float f = 0.5 #定义变量必须显示声明类型
动态(Dynamic)语言: 显示声明不被要求,因为类型赋值发生在运行阶段。例如在 Python 中,
f = 0.5 #定义变量不需要显示声明
- 从上面分析可以知道,python是动态语言(类型检查发生在运行阶段,而且不需要显示声明类型),那么强类型和弱类型的判别标准是什么?
- 先上概念:强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。
- 再看实例:
首先看下什么是强类型,在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算。例如在Python中:
data = 5 # 在运行时,data被赋值为整型
data = data + "xiaoming" #报错
然而,在弱类型中,它是很容易与其他类型混合计算的,比如同样一门伟大的语言 Javascript,使用它:
var data = 5
data = data + 'xiaoming' //string和int可以结合,程序正常执行
- 各种语言按照动态/静态,弱类型/强类型的划分:
- 结论:
1 类型检查确保一个表达式中的变量类型是合法的。在静态类型语言中,类型检查发生在编译阶段;动态类型语言,类型检查发生在运行阶段。
2 强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。
3 Python是一门动态的(dynamic)且强类型(strong)语言