6、抽象、更加抽象

抽象(函数)

创建函数:def 函数名(参数):即可,如需返回值,函数中包含return语句。

记录函数:如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,称为文档字符串。

若要使用函数修改外部变量值,可以返回值赋予该变量,也可以使用列表传参。

C/C++中的参数叫做位置参数,Python不仅支持位置参数(它们的位置很重要,比他们的名字更重要),还支持关键字参数。关键字参数可以明确每个参数的作用,使每个参数的含义变得清晰,而且弄错顺序程序也不受影响;另外使用关键字参数在函数中可以给参数提供默认值。

>>> def hello(greeting='hello',name='houkai'):
    print (greeting,name)

位置和关键字参数是可以联合使用的,要把位置参数放在前面就可以了。

收集参数,*参数名表示将所有剩下的参数放在元组中。**参数名可以收集关键字参数放在字典中。

作用域:globals函数获取全局变量值,locals返回局部变量的字典,vars函数返回含局部变量的所有变量字典。

如果在函数内声明(如果存在则直接使用)全局变量,使用global标示符。

递归调用中的经典应用:阶乘和幂

>>> def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)
>>> factorial(5)
120
>>> def power(x,n):
    if n==0:
        return 1
    else:
        return x*power(x,n-1)
>>> power(2,3)
8

这里的相似之处是n时的结果可以通过n-1时的结果来构建。

二分查找

seq=[1,2,3,4,5,6,7,8,9]
>>> def search(seq,number,lower=0,upper=None):
    if upper is None:upper = len(seq)-1
    if lower == upper:
        assert number == seq[upper]
        return upper
    else:
        middle = (lower+upper)//2
        if number > seq[middle]:
            return search(seq,number,middle+1,upper)
        else:
            return search(seq,number,lower,middle)
>>> search(seq,4)
3

更加抽象(类)

多态,同样的方法会根据调用对象类型的不同而产生不同行为。

封装,不同的对象具有独立的空间,相关独立。

继承,维护程序开发的结构性与简洁。

类的定义,class name:即可,使用s = name(),创建了对象。

_xxx不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。

__xxx双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以

__xxx___ 定义的是特列方法。像__init__之类的

类变量紧接在类名后面定义,相当于java和c++的static变量;实例变量在__init__里定义,相当于java和c++的普通变量。

是否为类的对象,isinstance函数;是否是继承关系,issubclass函数;

是否含有变量hasattr(x,’name’),是否有函数hasattr(x,’__name__’),所有特性用__dict__特性。

posted @ 2013-12-17 16:32  侯凯  阅读(358)  评论(0编辑  收藏  举报