我在做密码战,我赢不了这个挑战。 以下是链接: http://www.codewars.com/kata/54ca3e777120b56cb6000710/train/python
这是我的实现,但有一个错误“TypeError:”generator“对象不可调用。” ':
def chained(functions):
for f in functions:
yield f
def f1(x): return x*2
def f2(x): return x+2
def f3(x): return x**2
def f4(x): return x.split()
def f5(xs): return [x[::-1].title() for x in xs]
def f6(xs): return "_".join(xs)
print chained([f1, f2, f3])(0)
注意:重用chained([f1, f2, f3])(0)
是4
!!!!!在
以下是tese案例:
^{pr2}$
您可以使用
reduce
。。。在这将获取一个函数列表,并依次将该值应用于每个函数。因此,将采用第一个函数,并返回一个值。然后,将采用第二个函数,并将其应用于新值。。。在
您需要的是一个函数
chained
,它返回另一个接受一个变量的函数。一个接受一个变量(比如m
)的示例函数是lambda m: m*2
。在现在一个函数返回另一个接受一个值的函数?在
^{pr2}$所以我们把以上两种想法结合起来。。。在
在这里,}所有函数的函数。在
chained(fs)
获取函数列表fs
,并返回函数lambda m: reduce( lambda val, f: f(val) , fs, m)
。这是一个按顺序接受m
和{所以,
chained(fs)(0)
变成
(lambda m: reduce( lambda val, f: f(val) , fs, m))(0)
变成
(reduce( lambda val, f: f(val) , fs, 0))
这正是第一个表达。。。在
生成器应该被迭代。而不是:
尝试:
^{pr2}$您不需要返回生成器,而是需要返回一个函数,该函数接受一个参数并将其应用于每个链接函数。在
您的调用语法是:
这意味着您希望
chained
返回可以用单个参数调用的内容。一个函数就可以了。在有效的功能是:
^{pr2}$这将使用上一次函数调用的结果调用每个函数。首先使用初始参数。在
但是,由于您没有将函数列表传递给这个只接受一个参数的函数,所以您需要以其他方式捕获它们。您可以在函数中定义函数,它可以捕获任何局部变量:
定义函数
apply
本地捕获functions
参数。然后我们返回函数,这样就可以调用它,本质上是apply(0)
:相关问题 更多 >
编程相关推荐