class Person(object):
def __init__(self, name, gender, **kw):
self.name=name
self.gender=gender
for k,v in kw.iteritems():
setattr(self,k,v)
p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course
def __init__(self, name, gender, **kw):
self.name=name
self.gender=gender
for k,v in kw.iteritems():
setattr(self,k,v)
p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course
2018-11-08
最赞回答 / 慕粉1149065707
你这两种代码,咋一看没区别,其实有区别的啊,本质上的区别就是:左边的是最后调用的时候,是调用fn(x),fn(x)函数封装了变化,实际上print('call')与原来的f1函数是作为一个整体封装咋fn(x)里面,print是在f1函数上的拓展。而右边,不能看成是拓展,你只能看成是在原f2函数的逻辑之前,在加了一个print('call')打印的逻辑。如果还是有点懵逼,我只能举个粒子了:你试试左边再多调用几次print(f1(6))print(f1(7))这当然是正常的,但是右边很容易出问题,如果你是这样...
2018-11-03
代码有错,在print 'call %s() in %fs' % (f.__name__, (t2 - t1))中的%fs 改为%f s,就是在f和s之间加一个空格
2018-11-03
已采纳回答 / 慕UI8134040
两端代码其实是一样的。因为你在定义第二个函数def f(j=i)的时候引用了另外一个变量j,此时数组中的引用变量指向的也不是i,而是j所指向的内容。但是这里又因为外面套了一个for循环,所以,可以看做循环一次,调用一个变量j。如果你理解堆和栈,那就更容易理解了。总之,你可以理解成你的这个代码是答案的简写版。
2018-11-01
map()----返回一个List列表,接收单个参数map(f(*),List)列表每个参数运用函数
reduce()---返回一个List列表,接收两个参数reduce(f(*,*),List)列表每个参数累加或累剩
filter()---返回一个筛选之后List,接收单个参数filter(f(*),List)
sorted()---自然排序返回List列表,可以接收多个参数,sorted(List,cmp,key)
reduce()---返回一个List列表,接收两个参数reduce(f(*,*),List)列表每个参数累加或累剩
filter()---返回一个筛选之后List,接收单个参数filter(f(*),List)
sorted()---自然排序返回List列表,可以接收多个参数,sorted(List,cmp,key)
2018-10-31