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,对吗?
谢谢。
最佳答案
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,这会花费大量时间。