-
for k, v in kw.iteritems():
setattr(self, k, v)
查看全部 -
def __init__(self, name, gender, **kw):
self.name=name
self.gender=gender
for k, v in kw.iteritems():
setattr(self, k, v)
传入**kw 即可传入任意数量的参数,并通过 setattr() 绑定属性。
查看全部 -
json.load(s)默认会调用read()方法,但是需要参数s是文件类型。在students类中加入read()方法后,students类型的变量也可以调用read()方法
查看全部 -
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Teacher(Person): def __init__(self, name, gender, course): super(Teacher, self).__init__(name, gender) self.course = course
查看全部 -
每个函数在遇到第一个return之后就结束调用了,所以这里的if后面不用else
查看全部 -
当实例属性和类属性重名时,实例属性优先级高
查看全部 -
**kw表示dict字典,k,v是键值对。
**args表示元组
查看全部 -
要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用:
查看全部 -
任务
请定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。
要定义关键字参数,使用 **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, 'name') # 获取name属性'Bob' >>> setattr(s, 'name', 'Adam') # 设置新的name属性
>>> getattr(s, 'age') # 获取age属性,但是属性不存在,报错
>>> getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20
查看全部 -
查看全部
-
functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:
>>> import functools >>> int2 = functools.partial(int, base=2) >>> int2('1000000') 64 >>> int2('1010101') 85
所以,functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。
任务
在第7节中,我们在sorted这个高阶函数中传入自定义排序函数就可以实现忽略大小写排序。请用functools.partial把这个复杂调用变成一个简单的函数:
sorted_ignore_case(iterable)
参考代码:
import functools sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper())) print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])
查看全部 -
请思考带参数的@decorator,@functools.wraps应该放置在哪:
def performance(unit): def perf_decorator(f): def wrapper(*args, **kw): ??? return wrapper return perf_decorator
参考代码:
import time, functools def performance(unit): def perf_decorator(f): @functools.wraps(f) def wrapper(*args, **kw): t1 = time.time() r = f(*args, **kw) t2 = time.time() t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1) print 'call %s() in %f %s' % (f.__name__, t, unit) return r return wrapper return perf_decorator @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial.__name__
查看全部 -
sorted(L, f):高阶函数,接受函数f对L进行排序,函数f的返回值为-1,1,0;
查看全部 -
这里map作用的s其实是list中的各个元素,而非list本身,所以这里s[0]已经是指首字母了
查看全部
举报