-
map(function,iterable)
function:函数名称,只是abs,而不是abs()
iterable:一个或多个序列
查看全部 -
python装饰器
作用:极大地简化代码,避免每个函数编写重复性代码
打印日志:@log
检测性能:@performance
数据库事务:@transaction
URL路由:@post('/register')
查看全部 -
python中的匿名函数
关键字lambda表示匿名函数,冒号前面的x表示函数参数
限制:只能有一个表达式,不写return,返回值就是该表达式的结果。
使用匿名函数可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码。
查看全部 -
数学运算:
表示有理数,可以用Rational类来表示class Rational(object): def __init__(self, p, q): self.p = p self.q = q
要让Rational进行+运算,需要正确实现__add__
def __add__(self, r): return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
查看全部 -
__len__
如果一个类表现得像一个list,要获取多少个元素,就得用len()函数。要让len()函数工作正常,类必须提供一个特殊方法__len__(),它返回元素得个数。
查看全部 -
s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
a = ' 123' a.strip()
结果: '123'
a='\t\t123\r\n' a.strip()
结果:'123'
查看全部 -
__cmp__
对于int、str等内置数据类型排序时,python的sorted()按照默认的比较函数cmp排序,但是,如果对一组Student类的实力排序时,就必须提供我们自己的特殊方法__cmp__()。
如果List不仅仅包含student类,则__cmp__可能会报错
查看全部 -
如果要把一个类的实例变成str,就需要实现特殊方法__str__()
python定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__str__()用于显示给用户,而__repr__()用于显示给开发人员
__repr__的偷懒定义方法:__repr__=__str__
查看全部 -
特殊方法:任何数据类型的实例都有一个特殊方法:__str__()
例如:用于print的__str__、用于len的__len__、用于cmp的__cmp__
特点:特殊方法定义在class中、不需要直接调用、python的某些函数或操作符会调用对应的特殊方法
正确实现特殊方法
只需要编写用到的特殊方法
有关联性的特殊方法都必须实现
查看全部 -
获取对象信息:
拿到一个变量,除了用isintance()判断它是否为某种类型的实例外。首先可以用type()函数获取变量的类型,它返回一个Type对象,其次,可以用dir()函数获取变量的所有属性。对于实例变量,dir()返回所有实例属性,包括'__class__'这类有特殊意义的属性。注意到方法'whoAmI'也是s的一个属性。
dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要getattr()和setattr()函数了
>>> getattr(s, 'name') # 获取name属性'Bob' >>> setattr(s, 'name', 'Adam') # 设置新的name属性
查看全部 -
多重继承:
除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用
查看全部 -
多态:
类具有继承关系,并且子类类型可以向上转型看作父类类型,如果我们从Person派生出Student和Teacher,并都写了whoAmI()方法。在一个函数中,如果我们接受一个变量x,则无论该x是Person、student还是teacher,都可以正确打印结果。
这种行为称为多态,也就是说,方法调用将作用在x的实际类型上。s是Student类型,它实际上拥有自己的whoAmI()方法以及从Person继承的whoAmI方法,但调用s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。
由于python是动态语言,所以,传递给函数who_am_i(x)的参数x不一定是Person或Person的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可。这就是动态语言和静态语言最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用
查看全部 -
判断类型
函数isinstance()可以判断一个变量的类型,既可以哎python内置的数据类型如str,lisr,dict,也可以用在我们自定义的类,它们本质上都是数据类型
isinstance(p,person)----#判断p是不是person类型
在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法;一个实例可以看成它本身的类型,也可以看成它父类的类型
查看全部 -
继承一个类:
一定要用super(Student,self).__init__(name,gender)去初始化父类,否则,继承Person的Student将没有name和gender。
函数super(Student,self)将返回当前类继承的父类,即Person,然后调用__init__()方法,注意self参数已在supper()中传入,在__init.__()中将隐式传递,不需要写出(也不能写)
查看全部 -
类的继承:
新类不必从头编写
新类从现有的类继承,就自动拥有了现有类的所有功能
新类只需要编写现有类缺少的新功能
继承的好处
复用已有代码
自动拥有了现有类额所有功能
只需要编写缺少的新功能
Has关系应该使用组合而非继承
调用super().__init__,是用来初始化父类的
super(SubClass,self).__init__(args)
查看全部
举报