Python: 每日一题 52
本帖最后由 ooxx7788 于 2017-5-25 14:27 编辑今天这题目有点意思,大概属于会者不难,难者不会的题目。
写这样一个函数:
add(1)(2);
// returns 3
也可以连加:
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
当然,只输入一个也是可以的:
add(1); // 1
然后,我们还能储存返回值,并复用它。
addTwo = add(2);
addTwo; // 2
addTwo + 5; // 7
addTwo(3); // 5
addTwo(3)(5); // 10
好了,没有什么更多的了.
**** Hidden Message ***** 没人回答啊,这下尴尬了。给点提示,魔法方法。 消灭0回复。。。求教楼主 add()()()这种函数是怎么弄得?我反正不会{:10_269:} 更新答案! 我是来看答案的
看答案来了 啊啊啊啊啊 果断学习
看看答案 look 楼主 给你跪了 你那不是 class 么 ?
这是函数?是函数?函数? lovesword 发表于 2017-5-26 13:59
楼主 给你跪了 你那不是 class 么 ?
这是函数?是函数?函数?
工厂函数听说过吗? ooxx7788 发表于 2017-5-26 14:05
工厂函数听说过吗?
你这体题目一出来 别个 想的就是 def 。。。去实现
你给个class 出来,怪不得没人回答得了 lovesword 发表于 2017-5-26 14:10
你这体题目一出来 别个 想的就是 def 。。。去实现
你给个class 出来,怪不得没人回答得了
def还是class到不是最大的问题,这题用的self+n的方法倒是第一次见到{:10_256:} 琢磨了半天,终于把答案研究明白了,太抽象了
add(int)是继承了int的属性,可以转为整数,但同时通过__call__定义了其可以被当作函数调用,并且将上次整型之后的结果传入函数作为self的值,是不是这样?
nexthunghung 发表于 2017-5-26 17:23
琢磨了半天,终于把答案研究明白了,太抽象了
add(int)是继承了int的属性,可以转为整数,但同时通过__c ...
其实就是把这个实例化对象本身也变成了一个函数。
而self本身也只不过是一个int而已,没有括号的时候,他是一个普通的int,有括号的时候就变成了加法。
魔法方法确实可以实现很多不可思议的效果。不过想要用好魔法方法确实也不容易。很多东西不符合常规的思维。
另外,4个小时前你就来看答案了,半个小时前才又回复。你也是够拼啊。
哈哈,刚学没多久,见笑了。开始琢磨了半天也没想明白怎么实现,看了答案更晕了...又重新去学习了__new__,__init__, __call__,__getattr__等的魔法方法,最后回来通过在程序中加入print(self),print(n),print(add(self)),print(add(n)),最后终于可算大概齐能看明白点了。。
但是看后边那你们评论里提到的工厂函数,我搜了一个,貌似并不能实现这种无限调用的效果,action调用过之后,就结束了,有什么办法实现吗?
def maker(N):
def action(M):
return M+N
return action
nexthunghung 发表于 2017-5-26 19:01
哈哈,刚学没多久,见笑了。开始琢磨了半天也没想明白怎么实现,看了答案更晕了...又重新去学习了__new__,...
我说工厂函数只是想表达,类也应该算是函数的一种。 ooxx7788 发表于 2017-5-26 19:03
我说工厂函数只是想表达,类也应该算是函数的一种。
哦,好的,谢谢!确实,python灵活的用法太多了 看不懂啊