zoukankan      html  css  js  c++  java
  • 【codewar-7kyu】Unary function chainer

    ## 题目描述:

    Your task is to write a higher order function for chaining together a list of unary functions. In other words, it should return a function that does a left fold on the given functions. 

    chained([a,b,c,d])(input)

    Should yield the same result as

    d(c(b(a(input))))

    ## 思路分析:

    返回值是由原参数构成的函数,解析成多层函数的嵌套。input 是内层的参数。

    ## 代码解析:

    - Python

    1 def chained(functions):
    2     def apply(param):
    3         result = param
    4         for f in functions:
    5             result = f(result)
    6         return result
    7     return apply

    param 可是换成 result, 省略第三行(如下),不过不省略会语义上更清晰易读。注意 result 的作用域,别写成 for 的局部变量了

    完整可运行代码如下:

     1 #!/usr/bin/python
     2 # -*- coding: utf-8 -*-
     3 
     4 __author__ = 'pudding'
     5 
     6 
     7 def chained(functions):
     8     def apply(result):
     9         for f in functions:
    10             result = f(result)
    11         return result
    12     return apply
    13 
    14 
    15 def f1(x): return x*2
    16 
    17 
    18 def f2(x): return x+2
    19 
    20 
    21 def f3(x): return x**2
    22 
    23 def f4(x): return x.split()
    24 
    25 
    26 def f5(xs): return [x[::-1].title() for x in xs]
    27 
    28 
    29 def f6(xs): return "_".join(xs)
    30 
    31 
    32 if __name__ == '__main__':
    33     print chained([f1, f2, f3])(0)

    输出结果:4 即:((0**2)+2)*2

    apply一开始的参数(result 的初始值)为 chained([f1, f2, f3])(0)中的0

    一定要注意 return apply 而不是 return apply()

    ________你所记的,都是假的。
  • 相关阅读:
    HTML5结构
    HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素
    CF GYM 100703G Game of numbers
    CF GYM 100703I Endeavor for perfection
    CF GYM 100703K Word order
    CF GYM 100703L Many questions
    CF GYM 100703M It's complicate
    HDU 5313 Bipartite Graph
    CF 560e Gerald and Giant Chess
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/pudding-ai/p/5820254.html
Copyright © 2011-2022 走看看