我有一个函数数组,我正在尝试生成一个函数,该函数由我的数组中的元素组成.我的方法是:
def compose(list):
if len(list) == 1:
return lambda x:list[0](x)
list.reverse()
final=lambda x:x
for f in list:
final=lambda x:f(final(x))
return final
Run Code Online (Sandbox Code Playgroud)
这种方法似乎不起作用,将不胜感激.
(我正在颠倒列表,因为这是我想要函数的组合顺序)
python functional-programming composition function-composition
我想制作一个模块,以使其非常容易构建具有许多选项的点击命令。这些选项将被提炼成传递给命令的单个对象。作为说明性示例:
from magic import magic_command
import click
@magic_command('Colored')
@click.option('--color')
def cmd(magic, color):
pass
Run Code Online (Sandbox Code Playgroud)
然后,total命令将有许多--magic-...选项magic传递到传递给的对象中cmd。我能够使用以下方法实现这一目标:
def magic_command(name):
def decorator(func):
@click.option('--magic-foo')
@click.option('--magic-bar')
def wrapper(magic_foo, magic_bar, **kwargs):
print(f'initializing Magic with {magic_foo} and {magic_bar}')
magic = Magic(magic_foo, magic_bar)
func(magic, **kwargs)
try:
wrapper.__click_params__.extend(func.__click_params__)
except AttributeError:
pass
return click.command(f'{name}-Magic')(wrapper)
return decorator
Run Code Online (Sandbox Code Playgroud)
但是,将其弄乱__click_params__似乎并不是特别干净。
这个问题有点类似于这个问题,但是这种方法不允许我将许多魔术选项浓缩为一个魔术对象。
详细说来,我将不得不这样做
@magic_command('Colored')
@click.option('--color')
def cmd(magic_foo, magic_bar, color):
magic = Magic(magic_foo, magic_bar)
pass
Run Code Online (Sandbox Code Playgroud)
但这意味着自定义代码需要知道存在哪些魔术选项以及如何构造魔术。我想可以使用简化此操作,**kwargs但理想情况下,我只想将就绪magic对象传递给cmd。