python动态属性(Python是动态强类型的吗)
Python是动态强类型的 ,我们可以根据Python的变量定义和使用来进行判断 。
Python变量声明和定义
与C#不同 ,Python在使用变量之前无须定义它的类型,试着运行下面的例子:
i=12printi从上边我们可以看到 ,变量 i 在使用前并不需要定义 ,但是必须声明以及初始化该变量 。试着运行下面的例子:
i=1 printi+j上面的代码会产生一个异常:“NameError: name j is not defined ” ,Python提示变量 j 没有定义。这点和BASIC等弱类型的语言不一样 。在BASIC中 ,执行上述代码的时候不会产生异常 ,你可以在EXCEL的VBA开发环境里试一下 ,把 print改为MsgBox就可以 ,结果会输出 1 。这说明Python并不是一种类似BASIC的弱类型语言 。
另一方面 ,Python与C#有一个很大的差异就是在程序运行过程中 ,同一变量名可以(在不同阶段)代表不同类型的数据,看看下边的例子:
i=1 printi,type(i),id(i) i=10000000000 printi,type(i),id(i) i=1.1 printi,type(i),id(i)变量 i 的类型在程序执行过程中分别经历了int 、long和float的变化 ,这和静态类型语言(如C等)有很大不同 。静态语言只要一个变量获得了一个数据类 型 ,它就会一直是这个类型,变量名代表的是用来存放数据的内存位置 。而Python中使用的变量名只是各种数据及对象的引用 ,用id()获取的才是存放数 据的内存位置 ,我们输入的1 、10000000000和1.1三个数据均会保存在id()所指示的这些内存位置中,直到垃圾回收车把它拉走(在系统确定你 不再使用它的时候) 。这是动态语言的典型特征 ,它确定一个变量的类型是在给它赋值的时候 。
另一方面 ,Python又是强类型的 ,试着运行下边的例子:
#-*-coding:utf-8-*- i=10;j=ss printi+j #正确的写法是printstr(i)+j ,输出10ss会产生一个异常:“TypeError: unsupported operand type(s) for +: int and str ” 。在BASIC等弱类型的语言中 ,上边的例子会正常运行并返回(虽然有时候是不可预期的)结果 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!