最赞回答 / xdfcc
这个你这样理解,先从理论上其实就是通过一个装饰器把一个函数变成另外一个函数!也就是例子上的通过def performance(f)把factorial(n)函数变成了fn函数,最后执行的也是fn函数,那么fn函数做了什么呢,看装饰器里定义的fn函数就知道,fn其实就是第一通过print输出了一个字符串,第二返回一个r函数,而r函数在fn里也定义了r=f(*args, **kw),也就是调用传进去的f函数其实就是调用factorial(n),你可以自己结合运行程序来理解
2016-01-08
最新回答 / lc云泽
print 调用的是__str__方法,应该从__str__函数中找返回值;而return len()是__len__方法的返回值,所以需要在外部调用__len__才可以
2016-01-06
最赞回答 / 叶重楼
装饰器使用@是一个语法糖,是f=log(f)的简写,而且这个语法只能使用在函数定义处。如果你想在系统函数上使用装饰器,可以直接写<...code...> 你可以看看我的验证:<...code...>
2016-01-03
最赞回答 / flyeek
*args 实际上处理为tuple参考如下代码:class Person(object): def __init__(*args, **kw): print isinstance(args, tuple) args[0].name = args[1] args[0].gender = args[2] for k, v in kw.iteritems(): setattr(args[0], k, v)p = Person('...
2016-01-03
最赞回答 / 1984的橘子和柠檬_0
把函数名看成一个指针变量会好理解一些。。fs.append(f)实际上是把f这个指针变量添到了fs列表里,并没有真的调用f函数,然后一直循环到i=3。f1= count()是把f指针变量赋给f1。。当执行到print f1()时,f1指向函数f,这个时候才调用了f函数,但是这时i等于3了。f只是一个变量,f()才是调用了函数
2015-12-31
最赞回答 / 小明在努力
count()函数返回的是一个list 里面有三个值f1, f2, f3 = count()的意思是将list的三个值分别赋值给f1 f2 f3如果改变了list元素的个数 再运行f1, f2, f3 = count()时不行的 可以试下
2015-12-31
最赞回答 / Breaker_CHN
分别解答你的两个问.并未对j赋值, j的值是如何获得的?考察函数定义:<...code...>上面就是j赋值问题的解析.另外一问, f1, f2, f3 = count() 调用方式的理解?首先, 考察count()的返回值: fs列表fs列表存...
2015-12-31
最赞回答 / 睡着了的貓貓
自问自答:self.name = name 是初始化实例属性,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上name属性.可以不用添加,但是在该def中后面使用的时候,就都要加self.name了。self.name指的是实例属性。
2015-12-27