2024-04-28 13:18:10 发布
网友
假设下面的函数f有两个参数,那么只将map应用于x的标准方法是什么?
def f (x,y): print x,y
更具体地说,我想用map在一行中执行以下操作。
list=[1,2,3] fixed=10 for s in list: f(s,fixed)
一种方法是:
import functools map(functools.partial(lambda x,y:f(y,x),fixed),list)
什么是更好的方法?
Given the following function f with two arguments, what is the standard way to apply map to only x?
略论咖喱及部分应用
在FP术语中,函数f是"uncurried"-虽然它在概念上接受两个参数,但它们被捆绑在一个产品结构中。在Python中,所有的东西都是未结婚的。你必须立刻给出所有的论点,否则就没有。
f
要解决这个问题,有各种技巧,但从概念上讲,您只需要“curry”函数。也就是说,将f(x,y)转换为f(x),后者返回一个新函数g(y)。
f(x,y)
f(x)
g(y)
在默认为current的语言中,您可以很容易地编写此翻译:
-- curry: take a function from (x,y) to one from x to a function from y to z curry :: ((x,y) -> z) -> (x -> y -> z) curry f x y = f (x, y)
因此curry分别获取当前的f及其产品参数,并在所有参数都可用时应用这些参数。相反的情况也很简单:
curry
uncurry :: (x -> y -> z) -> ((x,y) -> z) uncurry f (x,y) = f x y
这与部分应用程序有何关系?
在无载波语言中,每个参数都可以依次应用(例如,部分地应用于函数的arity)。在咖喱语言中,必须先玩一些技巧来取消函数的顺序,如上面的例子所示。
我认为在默认环境下使用curried更灵活,因为部分应用程序是免费的。在这样的环境中,通常将modify a data structure into a pipeline的函数链接在一起。E、 g.整数修改管道:
(+1) . (*2) . (^3) $ 7
只是一个部分应用的、未载波的函数链,每个函数在前一个函数的输出上操作。这可能很好,因为它在视觉上分离了关注点。
首先,不需要使用lambda和partial—它们是可选的:
map(lambda x:f(x,fixed),srclist)
其次,只要知道参数名,就可以用partial绑定第二个参数:
partial
map(functools.partial(f,y=fixed),srclist)
或者,使用列表理解:
[f(x, fixed) for x in srclist]
map(lambda x: f(fixed,x), thelist)
或者根本不使用map(),而是使用列表理解。
map()
[f(fixed, x) for x in thelist]
注意:不要使用list作为变量名,它是一个重要的内置名称(列表类型)。
list
略论咖喱及部分应用
在FP术语中,函数
f
是"uncurried"-虽然它在概念上接受两个参数,但它们被捆绑在一个产品结构中。在Python中,所有的东西都是未结婚的。你必须立刻给出所有的论点,否则就没有。要解决这个问题,有各种技巧,但从概念上讲,您只需要“curry”函数。也就是说,将
f(x,y)
转换为f(x)
,后者返回一个新函数g(y)
。在默认为current的语言中,您可以很容易地编写此翻译:
因此
curry
分别获取当前的f
及其产品参数,并在所有参数都可用时应用这些参数。相反的情况也很简单:这与部分应用程序有何关系?
在无载波语言中,每个参数都可以依次应用(例如,部分地应用于函数的arity)。在咖喱语言中,必须先玩一些技巧来取消函数的顺序,如上面的例子所示。
我认为在默认环境下使用curried更灵活,因为部分应用程序是免费的。在这样的环境中,通常将modify a data structure into a pipeline的函数链接在一起。E、 g.整数修改管道:
只是一个部分应用的、未载波的函数链,每个函数在前一个函数的输出上操作。这可能很好,因为它在视觉上分离了关注点。
首先,不需要使用lambda和partial—它们是可选的:
其次,只要知道参数名,就可以用
partial
绑定第二个参数:或者,使用列表理解:
或者根本不使用
map()
,而是使用列表理解。注意:不要使用
list
作为变量名,它是一个重要的内置名称(列表类型)。相关问题 更多 >
编程相关推荐