-
Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。 使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = decorate(f) 这样的代码。查看全部
-
因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。
有一个偷懒的定义__repr__的方法:
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__
查看全部 -
有关联性的特殊方法必须实现
查看全部 -
要定义关键字参数,使用 **kw;
除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。
参考代码:
class Person(object): def __init__(self, name, gender, birth, **kw): self.name = name self.gender = gender self.birth = birth for k, v in kw.iteritems(): setattr(self, k, v) xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student') print xiaoming.name print xiaoming.job
查看全部 -
getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20:
getattr(s, 'name') # 获取name属性'Bob'
查看全部 -
看下图:
像这样,D 同时继承自 B 和 C,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次:
>>> d = D('d') init A... init C... init B... init D...
查看全部 -
由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可:
class Book(object): def whoAmI(self): return 'I am a book'
这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
查看全部 -
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO查看全部 -
不需要闭包,一个函数就行了
查看全部 -
def log(f):
def fn(x):
print 'call ' + f.__name__ + '()...'
return f(x)
return fn查看全部 -
def performance(f):
def fn(*args, **kw):
t1 = time.time()
r = f(*args, **kw)
t2 = time.time()
print 'call %s() in %fs' % (f.__name__, (t2 - t1))
return r
return fn查看全部 -
==,函数命名
查看全部 -
若reduce传入第三个参数initial初始值 则首先传的是initial和第一个参数查看全部
-
filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。查看全部
-
3.0版本的filter函数返回得不是一个list对象 需将其转为list对象才可以输出 另有sqrt函数 需import math查看全部
举报