Python解释代码

时间:2017-09-10 03:35:48

标签: python

def compose(f, g):
    return lambda x:f(g(x))

def thrice(f):
    return compose(f, compose(f, f))

def repeated(f, n):
    if n == 0:
        return identity
    else:
        return compose(f, repeated(f, n - 1))

def sq(x): return x**2

1)print(thrice(thrice)(sq)(1))

2)print(thrice(thrice(sq)(2))

任何人都可以向我解释为什么第一个函数返回1而第二个函数不起作用? 我想三次(三次)(sq)会给我sq∘sq∘..... 27次,所以sq(1)是1 ^ 27 = 1,这是正确的吗?  谢谢。

1 个答案:

答案 0 :(得分:1)

thrice(thrice)(sq)(x)是一个发展非常快的功能:

thrice(thrice)(sq)(1.0000009)
#2.890634480354213e+52
thrice(thrice)(sq)(1.000001)
#1.9497974384856317e+58

当您将其应用于浮点数时,它会快速溢出:

thrice(thrice)(sq)(1.000006)
# OverflowError: (34, 'Numerical result out of range')

已编辑(感谢@KarlKnechtel)但是,Python实现了任意精度整数数字。当您将函数应用于整数(例如,thrice(thrice)(sq)(2))时,解释程序会计算精确答案,然后尝试打印它,小数位数为40,403,562,需要花费大量时间。