面试中考了一道题,题目如下:
在Python环境中运行
1 | print(1 + "9") |
会出现什么?
一开始很困惑,当我自己去跑一遍之后发现,解释器会报错
1 | TypeError: unsupported operand type(s) for +: 'int' and 'str' |
我突然才意识到,这里涉及的强类型语言和弱类型语言的区别
强类型语言
- 强类型语言又称为强类型定义语言,要求所有的变量都有强制定义,之后才能使用,而且一旦声明之后,如果不经过强制转换,那么它就永远是这个数据类型了。
- 一般也不允许不同类型的不同类型的变量互相进行运算
- 比如Java,C++,Python就属于强类型语言
弱类型语言
- 弱类型语言又称弱类型定义语言,与强类型语言相反,允许不同类型的变量进行相互运算
- 比如在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,然后可以把它看成整数123,而不需要显示转换。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
关于动态语言和静态语言
所有的编程语言都是需要先经过编译之后才能供机器使用的
动态语言
- 动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
- Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言
静态语言
- 静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型。
- C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
动态语言易上手,而且无需事先将所有变量都申明好,而静态语言的好处是运行速度会比动态语言快
Python 属于强类型的动态脚本语言