Python-python返回值为函数的一个题

发布于 2016-11-27 03:29:19 字数 260 浏览 1284 评论 3

def double(f):
print(f)
return (lambda x: (f(f(x))))

def inc(x):
return x+1

print(double(inc)(0))
print((double(double))(inc)(0))
print((double(double(double)))(inc)(0))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

偏爱自由 2017-06-05 15:44:18

有个IDE名字叫spider可以类似于C的IDE那样跟踪变量,查看环境变量,打断点等

夜无邪 2017-03-18 02:54:07

分清楚double了什么就能明白了。

下面用 . 表示函数组合,即 f (g (x)) = (f . g) x, 函数组合组合是满足结合律的,即 f . g . h = f . (g . h)。

double f = f . f

double (double f)
= double (f . f)
= (f . f . f . f)

(double double) f
= (double . double) f --> 多的一次double展开,下面和double (double f)相同的。
= double (double f)
= double (f . f)
= f . f . f . f

(double (double double)) f
= ((double double) . (double double)) f
= (double . double . double . double) f
= double . double . double (double f)
= double . double . doubel . (f . f)
= ...
= f . f . f . f . f . f . f . f . f . f . f . f . f . f . f . f

这就像是 2 * 2 * ... * 2 和 2 ^ 2 ^ ... ^ 2的差别。

如果你用三次的就很明显了:

 def trice(f):
return (lambda x: (f(f(f(x)))))

虐人心 2016-12-19 01:21:04

做题什么的最讨厌了,谁特么这么闲。。这个考的是函数式编程,所以你用数学的思维想就好了

对2, double(double) = lambda x: double(double(x))
so (double(double))(inc) => lambda x: double(inc(inc(x)))
=> lambda x: inc(inc(inc(inc(x))))

对3, 同理,
(double(double(double))) => lambda x: double( lambda x: double(double(x)) )
=> lambda x: double(double(double(double(x))))
so (double(double(double)))(inc) => (double(double(double(inc))))

把上面展开,你看是不是lambda x: inc(inc(...(inc(x)))) 一共16个inc...

认为3是8的关键错误在于,认为表达式3等价于double(表达式2)。而实际上3需要先把前面的3个double展开后再带入inc

在python设断点

x = 10
import pdb; pdb.set_trace()

程序在运行到pdb那行的时候会停下并进入interactive shell, 你可以查看栈里变量等等:
>>> x
10

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文