-
函数式编程实例查看全部
-
函数名其实也是指向函数的变量查看全部
-
python里的变量赋值基本可以看成是c语言中的指针 而且是可变指针查看全部
-
在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。查看全部
-
__slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存。查看全部
-
用 type() 函数获取变量的类型,它返回一个 Type 对象 用 dir() 函数获取变量的所有属性查看全部
-
Python允许从多个父类继承,称为多重继承。 多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次 多重继承定义时父类的顺序好像不重要。查看全部
-
多态。也就是说,方法调用将作用在 x 的实际类型上。 动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。 调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。如果没有找到就报错。查看全部
-
在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。 一个实例可以看成它本身的类型,也可以看成它父类的类型。查看全部
-
用 super(Student, self).__init__(name, gender) 去初始化父类, 函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法查看全部
-
在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。 通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls。查看全部
-
方法也是属性,可以动态地添加到实例上。使用types.MethodType()把一个函数变为一个方法。需要引入types模块。 self.get_grade=lambda:'A',显然使用了匿名函数,返回的肯定是一个函数,另外方法调用需要传入隐藏参数self。查看全部
-
def log(f): def wrapper(*args, **kw): print 'call...' return f(*args, **kw) wrapper.__name__ = f.__name__ wrapper.__doc__ = f.__doc__ return wrapper 这样写decorator很不方便,因为我们也很难把原函数的所有必要属性都一个一个复制到新函数上,所以Python内置的functools可以用来自动化完成这个“复制”的任务: import functools def log(f): @functools.wraps(f) def wrapper(*args, **kw): print 'call...' return f(*args, **kw) return wrapper查看全部
-
@log('DEBUG') def my_func(): pass 把上面的定义翻译成高阶函数的调用,就是: my_func = log('DEBUG')(my_func) 上面的语句看上去还是比较绕,再展开一下: log_decorator = log('DEBUG') my_func = log_decorator(my_func) 上面的语句又相当于: log_decorator = log('DEBUG') @log_decorator def my_func(): pass 所以,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数: def log(prefix): def log_decorator(f): def wrapper(*args, **kw): print '[%s] %s()...' % (prefix, f.__name__) return f(*args, **kw) return wrapper return log_decorator @log('DEBUG') def test(): pass print test()查看全部
-
要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用:*args可以当作可容纳多个变量组成的tuple **kw可以当作容纳多个key和value的dict 同时使用*args和**kws时,必须*args参数列要在**kw前 def log(f): def fn(*args, **kw): print 'call ' + f.__name__ + '()...' return f(*args, **kw) return fn 现在,对于任意函数,@log 都能正常工作。查看全部
举报
0/150
提交
取消