Python是一门强类型语言,单定义变量时不需要制定类型。
C#这样定义变量:
int i = 10;
VB这样定义变量:
Dim i As Integer = 10
Python不需要制定类型,给变量赋什么类型的值,它就是什么类型。(穿神马就是神马?)
>>> var = 10 >>> type(var) <type ‘int‘> >>> var = ‘string‘ >>> type(var) <type ‘str‘> >>> var = [1,2] >>> type(var) <type ‘list‘> >>> var = (1,) >>> type(var) <type ‘tuple‘> >>> var = {1:‘a‘} >>> type(var) <type ‘dict‘> >>>
※个人理解:
Python内一切皆对象,int也是,string也是,类也是。
变量var所存储的只是一个地址(指针),该地址指向具体的类型数据。切该地址对于不同的数据类型兼容,int的地址和类的地址没区别。
给变量var赋值的过程只是替换地址的过程,地址指向的是什么类型var并不关心。
>>> i = 0 >>> id(i) 23897828 >>> i = 10 >>> id(i) 23897708 >>>
以上代码表明变量i指向的地址改变了,而不是i的值发生了变化。
综上,Python中变量不强制制定类型;变量赋值时确定类型;变量类型可变。
相对的,C#的var声明的类型,第一次赋值后类型就不可再变,Python更加灵活。
缺点:同一个变量出现不同的地方可能类型都不同,造成阅读困难。对于类型的校验全部推到运行时,需要写代码的人自我约束。IDE识别变量困难。
说实话,我并不觉得Python的这个动态数据类型是个好东西。