gpt4 book ai didi

python - 如何使用python实现 `Unary function chainer`?

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:40 24 4
gpt4 key购买 nike

我在玩codewar,我赢不了这个挑战。链接在这里: http://www.codewars.com/kata/54ca3e777120b56cb6000710/train/python

这是我的实现,但是有一个错误'TypeError: 'generator' object is not callable':

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)

注意:reuslt chained([f1, f2, f3])(0)4!!!!!

以下是这些案例:

test.assert_equals( chained([f1,f2,f3])(0), 4 )
test.assert_equals( chained([f1,f2,f3])(2), 36 )
test.assert_equals( chained([f3,f2,f1])(2), 12 )

最佳答案

您需要返回一个函数,而不是返回一个生成器,该函数接受一个参数并将其应用于每个链式函数。

你的调用语法是:

chained([f1, f2, f3])(0)

这意味着您希望 chained 返回您可以使用单个参数调用的内容。一个函数就可以了。

一个可行的函数是:

def apply(param):
result = param
for f in functions:
result = f(result)
return result

这将使用前一个函数调用的结果调用每个函数。首先使用初始参数。

但是,由于您没有将函数列表传递给这个只接受一个参数的函数,因此您需要以其他方式捕获它们。您可以在函数内定义一个函数,它会捕获任何局部变量:

def chained(functions):
def apply(param):
result = param
for f in functions:
result = f(result)
return result
return apply

定义函数 apply 在本地捕获 functions 参数。然后我们返回函数以便调用它,本质上是 apply(0):

>>> chained([f1, f2, f3])(0)
4

关于python - 如何使用python实现 `Unary function chainer`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28713934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com