我们可以使用关键字arguments和curry函数,直到所有参数都以任何顺序接收到吗?你知道吗
例如,我有以下代码:
def create_folder_transformer(folder):
return lambda predicate: lambda file_transformer: map(file_transformer,
filter(predicate,
os.listdir(folder)))
我可以用一个特定的文件夹创建一个folder_transformer
,然后提到“predicate etc”,但它有一个特定的顺序。不过,我不认为它需要与这一命令挂钩。你知道吗
我想实现这样的目标:
predicate
,则得到一个接受folder
的分部函数
和file_transformer
作为参数。现在如果我提供folder
,我得到一个部分函数,它接受file_transformer
。你知道吗file_transformer
,则得到一个以predicate
和folder
为参数的分部函数。现在如果我提供predicate
,我得到一个接受folder
的分部函数。你知道吗简而言之,是否有一个内置的部分创建者,它不断地递归地生成部分函数,直到获得所有的输入;如果满足输入,就执行代码。我相信它在Haskell中被称为currying,它是函数默认执行的方式。你知道吗
我认为有帮助的用例:
当我用n
操作转换特定的folder
时,
用folder
创建分部会更好。
当我有一个特定的谓词,比如-过滤掉许多文件夹中的mp4
文件-一个带有predicate
的分部,比如string.endswith(".mp4")
会更好。
我读了部分docs,但是如果我没有填写一些参数,这些部分就不会返回部分。但是既然我已经声明它为None
,我也不能期望它。理想情况下,我希望我的函数本身能够像这样运行,而不必担心使用像partial这样的附加函数,即应该将它烘焙到我的函数中。你知道吗
def folder_transformer(folder=None, predicate=None, transformer=None):
return map(transformer, filter(predicate, os.listdir(folder)))
file_transformer = partial(folder_transformer, predicate=os.path.isfile)
# This gives me a "map" object, but I want another partial takes "transformer".
current_transformer = file_transformer(folder=folder)
# This works, but my question is can I make my function do this automatically.
current_transformer = partial(file_transformer,folder=folder)
我带来了一个小脚本供我个人使用。你知道吗
附言:如果有人知道一个图书馆可以做类似的事情,请告诉我。你知道吗
相关问题 更多 >
编程相关推荐