为什么说 Python 是强类型语言?
强类型语言
强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
java、.NET、C++等都是强制类型定义的。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
例如你有一个整数,如果不显式地进行转换,你不能将其视为一个字符串。
弱类型语言
与强类型定义相反,类型可以被忽略的语言的语言。
VBScript是弱类型定义的。在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,然后可以把它看成整数123,而不需要显示转换。
但其实它们的类型没有改变,VB只是在判断出一个表达式含有不同类型的变量之后,自动在这些变量前加了一个clong()或(int)()这样的转换函数而已。能做到这一点其实是归功于VB的编译器的智能化而已,这并非是VB语言本身的长处或短处。
区别
对于“强弱类型”判定的核心是“不同类型的变量是否允许隐式转化”
强类型语言:倾向于不对变量的类型做隐式转换
弱类型语言:倾向于对变量的类型做隐式转换
python强弱判定
python不倾向于对变量的类型做隐式转换,根据定义可以判定是一门强类型语言。
例如:
a = 1
b = "1"
a < b // Type error
a == b // false,符合==的意思,类型都不一样显然是不相等的
1 + 1.1 // 2.1,为了符合直觉做了隐式转换
容易引起干扰的是动态语言和静态语言
动态类型语言
动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。可以在运行时改变变量的类型。
Python和Ruby就是一种典型的动态类型语言。
静态类型语言
数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型。不可以在运行时改变变量的类型。
C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
python动静判定
python可以在运行时改变变量的类型,因此python是一门动态类型语言
a = 1
a = "1" // 不会报错
结论
python是一门强类型动态语言。
编程语言画了一张分类图: