-
-
[原创]闲话数据类型
-
发表于:
2012-1-7 10:22
4961
-
近日在学习python.一点感想,不知道该发到哪里,就发这儿吧。
python 中,不需要变量声明,直接使用。定义一个新变量是不需要写它的数据类型的,实际上也不允许指定数据类型。一个新变量的数据类型总是从赋值的源自动得到。一个已有变量,如果再次赋值,相当于销毁过去,重新定义,所以可能再次赋值后,变量的数据类型完全不同。
C++相反,变量声明时,必须指定变量的数据类型。变量声明后,数据类型就已经确定,终身不再改变。赋值时,如果源数据类型与本变量不同,则试图自动转化。比如 short 可以自动转化为 int等。如果不可能转化,则编译出错。有时需要用强制转化比如 (short)value 或 static_cast<short>value。自动转化或强制转化都可能产生难于发现的bug。
由此可见,在“变量声明是否需要数据类型”这个问题上,python与C++正好走了两个极端。一个C++程序员很难想象居然会有一种编程语言,全程不需要数据类型,全自动。
走极端总是不好的。
在python中,因为变量不能写数据类型,所以函数的定义只能写参数名,不知道参数的类型 def funcname(p1,p2) 这里p1和p2是什么类型?不知道。这个函数的返回类型是什么?也不知道,要看实现代码。如果函数的实现是 return p1+p2,我们也只能知道:p1与p2的数据类型可能是一致的,返回值看起来也与它们一致。至于是short还是 int 甚至是字串,不知道。由此我们可以得出结论,python的每一个函数,实际上都相当于C++中的模板。
每一个函数都是模板!有必要吗?不可否认,有时候这的确很有用。但多数情况下,一个函数只能应付一种参数类型,只会出现一种返回值类型。python程序员可能需要给每个函数加注解:你应该用什么类型调用我,我会返回什么类型。
python做得过头了。C++也好不到哪里去。明明变量的数据类型可以从赋值源自动得到的,还非要写不可。麻烦,不方便维护。
一个完美的编程语言,应该允许自动变量类型。也允许指定变量类型。应该分清函数与模板。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)