一 OOP
与C++和Java一样,Python同样具有OOP设计。
过程式:从前到后,一条一条,机器能接受的顺序性方式;方式大概为“首先你应该做什么,第二应该做什么,高级点的做点假设如果遇到什么情况要做什么,或者一件事情要做多少多少遍,… …,”
OOP式:从“类与对象”方式来抽象和理解世界。例如首先物体(Object)大概可以分为“生物”与“非生物”,“生物”又能分为“人、动物、植物”等,“人”又分为“男人,女人”等。。。大自然在世界之巅,不断分类设定。类似于“族谱”,上下之间能“继承”。
类与对象。类是抽象的,是一群的概述,对象是具体的,独立的,例如我存在一个独立的人。对象拥有所在类的属性和方法,同样拥有属于自己对象的属性(方法)。
现实世界中,类拥有属性(attribute)和行为(action);抽象数据中,类拥有数据(data)和方法(method)。类之间,存在继承(inheritance)与改良,类与对象之间,存在实例化。在实例化之后,对象能够在继承的类成员之外,增加属于自己的数据成员。
二 Python OOP
末 Python 中的坑
Python 很强大,坑也不少,一个一个填吧。
一 Python 处理中文及编码方式
Python3.0之前,由于编码的缘故,处理中文夹杂情况,十分痛苦。要想彻底让它不是问题,第一,理解编码方式之间转换;第二,几个实际例子在手。
二 Python基础语法
1. 浅拷贝赋值,传值与传地址调用
首先看两个例子,关于一个函数参数为int和list两种类型时的不同操作,以增加++一个值为例。
# 传值value参数a = 1def change_integer(a):a = a + 1return a# 传地址address参数b = [1,2,3]def change_list(b):b[0] = b[0] + 1return b# test valueprint change_integer(a)print 'a = ',aprint change_list(b)print 'b[0] = ',b[0]#Result:>a = 1>b[0] = 2
第一个integer例子中,将一个int类型变量传递给函数,原整型变量a不发生变化。
第二个list例子中,将一个list类型变量传递给函数,原listb会发生变化。
原因在于,对于基本数据类型(例如int),函数会在内存中复制一个新的变量,从而不影响原来变量,这叫“值传递”;
对于list来说,并不属于基本变量,函数传递的是一个指针,指向序列在内存中的地址,从而影响原来的值,称为“指针传递”。
同理,对于matrix或者array类型的数据,也属于非基本类型,因此array_a = array_b这样行为,array_b做操作时同样会影响到array_a,特别注意!!