python学习心得

来源:互联网 发布:文字读取软件在线 编辑:程序博客网 时间:2024/05/16 08:05

最近开始学习python,感觉python和c++,java,perl有些不同,现记录于此。


python的变量都是引用,并且变量本身没有类型,定义一个变量,直接把变量名写出来就搞定。比如

a = 3

a = 'spam'

a = 1.23

a = myclass()

我们可以把不同类型的对象,赋值给a,a都能接受。这点和其他语言很不一样(c++就是一种强类型语言,变量也有类型,你只能把对象赋值给同类型的变量),这点也为写python代码提供了不同的思路。a是一个变量,a本身没有类型说明,所有类型的说明都来自于a所引用的对象。当我们对a进行操作,对类型的检查都来源于a引用的对象,而和a本身无关。这一点,使得python在语言层面就能很好的支持多态。

对下面的代码,放在任何地方,语法总是对的:

def  testFunction( obj )

         obj.testFunction()

参数obj作为一个变量,它本身可以接受任何对象,所以obj调用一个叫 “testFunction”的成员函数,语法上是可以的。只有在运行时刻,obj所引用的对象确定了,这时候,obj能够调用的成员函数才确认,这时候如果找不到“testFunction”这个成员函数,才报错。

(带来的缺点就是,如果手误,对函数名拼错了,也只有运行后才知道)

(python是个动态语言,可以对对象在运行时,增加属性,即我们可以程序跑起来后,代码运行过程中添加一个成员函数,然后调用这个成员函数就不会报错了)

由此导致了2个问题:

1,c++,java中继承接口的概念在python似乎没啥意义。

       在c++中,我们定义了个接口类,通过继承这个接口类来实现不同版本的实现。我们把这个接口类暴露出来,而对继承类隐藏起来。外面只知道接口,不知道实现。外面因为有了接口,也知道怎么调用,多完美的设计模式。

       可惜到了python,接口似乎没啥意义。接口的本意是告诉外面那些函数可以调用,这样可以通过编译器的编译。而在python中,哪些函数可以调用,直接给个文档就ok了,外面按照文档就可以编码了。因为一个变量调用任何函数在语法上都不会报错。

2,不导入模块,也能调用模块内的类方法。

       在c++,java中,我们include一个头文件之后,才可以使用这个头文件定义的函数,变量名等等。

       到了python,如果是通过变量来引用一个对象,我们对变量的操作完全不受限制,即使我们不import定义这个对象的模块,语法上也是没有问题。我们只有在定义一个对象时候(也就是new一个对象的时候)才需要import这个模块的定义文件。这样看来,我们可以减少很多模块之间的import操作,只要在当前文件中,是通过变量来操作这个对象,我们就不需要import对应模块到当前的文件中。


 


0 0