ceo*_*com 4 python functional-programming
嗨,我是函数式编程的新手.我做的是
>>> g=lambda x:x*2
>>> f=g
>>> g=lambda x:f(f(x))
>>> g(9)
36
Run Code Online (Sandbox Code Playgroud)
现在,它不是g作为一个非终止递归函数创建的- g(x)转换为一个给出结果的新函数g(g(x)).
>>> f=g
>>> g=lambda x:f(f(x))
>>> f(8)
RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)
根据g(x)的第一个定义,我希望g将其转换为一个给出结果的函数g(g(g(x))).为什么不呢?是否有可能以g(g(g(...(g(x))....)))这种方式创建一个导致一定次数迭代的新函数?
当你f = g第二次这样做时,f变成了lambda x: f(x).闭包是按名称创建的,而不是按值创建的.
使用辅助函数变得容易:
def compose(f, g):
return lambda x: f(g(x))
square = lambda x:x*2
g = square
for i in xrange(4):
g = compose(g, square)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |