ooxx7788 发表于 2017-5-24 15:52:35

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 *****

ooxx7788 发表于 2017-5-25 11:22:22

没人回答啊,这下尴尬了。给点提示,魔法方法。

进击的小蜗牛 发表于 2017-5-25 11:42:27

消灭0回复。。。求教楼主 add()()()这种函数是怎么弄得?我反正不会{:10_269:}

ooxx7788 发表于 2017-5-25 14:29:07

更新答案!

ButcherRabbit 发表于 2017-5-25 15:24:36

我是来看答案的

瓦蓝 发表于 2017-5-25 20:52:19

看答案来了

z514624485 发表于 2017-5-25 22:17:13

啊啊啊啊啊

MaoMaoCaoCao 发表于 2017-5-26 12:45:20

果断学习

nexthunghung 发表于 2017-5-26 13:16:02

看看答案

lovesword 发表于 2017-5-26 13:58:09

look

lovesword 发表于 2017-5-26 13:59:42

楼主 给你跪了 你那不是 class 么 ?
这是函数?是函数?函数?

ooxx7788 发表于 2017-5-26 14:05:27

lovesword 发表于 2017-5-26 13:59
楼主 给你跪了 你那不是 class 么 ?
这是函数?是函数?函数?

工厂函数听说过吗?

lovesword 发表于 2017-5-26 14:10:51

ooxx7788 发表于 2017-5-26 14:05
工厂函数听说过吗?

你这体题目一出来 别个 想的就是 def 。。。去实现
你给个class 出来,怪不得没人回答得了

jerryxjr1220 发表于 2017-5-26 17:12:48

lovesword 发表于 2017-5-26 14:10
你这体题目一出来 别个 想的就是 def 。。。去实现
你给个class 出来,怪不得没人回答得了

def还是class到不是最大的问题,这题用的self+n的方法倒是第一次见到{:10_256:}

nexthunghung 发表于 2017-5-26 17:23:56

琢磨了半天,终于把答案研究明白了,太抽象了

add(int)是继承了int的属性,可以转为整数,但同时通过__call__定义了其可以被当作函数调用,并且将上次整型之后的结果传入函数作为self的值,是不是这样?

ooxx7788 发表于 2017-5-26 18:15:15

nexthunghung 发表于 2017-5-26 17:23
琢磨了半天,终于把答案研究明白了,太抽象了

add(int)是继承了int的属性,可以转为整数,但同时通过__c ...

其实就是把这个实例化对象本身也变成了一个函数。
而self本身也只不过是一个int而已,没有括号的时候,他是一个普通的int,有括号的时候就变成了加法。
魔法方法确实可以实现很多不可思议的效果。不过想要用好魔法方法确实也不容易。很多东西不符合常规的思维。

另外,4个小时前你就来看答案了,半个小时前才又回复。你也是够拼啊。

nexthunghung 发表于 2017-5-26 19:01:18

哈哈,刚学没多久,见笑了。开始琢磨了半天也没想明白怎么实现,看了答案更晕了...又重新去学习了__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

ooxx7788 发表于 2017-5-26 19:03:35

nexthunghung 发表于 2017-5-26 19:01
哈哈,刚学没多久,见笑了。开始琢磨了半天也没想明白怎么实现,看了答案更晕了...又重新去学习了__new__,...

我说工厂函数只是想表达,类也应该算是函数的一种。

nexthunghung 发表于 2017-5-26 19:14:11

ooxx7788 发表于 2017-5-26 19:03
我说工厂函数只是想表达,类也应该算是函数的一种。

哦,好的,谢谢!确实,python灵活的用法太多了

fandalong 发表于 2017-5-26 20:49:05

看不懂啊
页: [1] 2 3 4
查看完整版本: Python: 每日一题 52