Python语言是否具有内置函数,用于map
的模拟,它将参数发送到函数序列,而不是函数到一系列参数?
普通map
会"输入" (像Haskell一样思考)(a -> b) -> [a] -> [b]
;有没有相应类型的a -> [(a -> b)] -> [b]
?
我可以通过多种方式实现这一点。这里使用lambda
def rev_map(x, seq):
evaluate_yourself_at_x = lambda f: f(x)
return map(evaluate_yourself_at_x, seq)
rev_map([1,2], [sum, len, type])
打印[3, 2, list]
。
我只是好奇这个"这个概念是否会导致我自己评估自己的功能。有内置或常用的形式。
对我来说,一个动机就是在功能分析中考虑双重空间,其中曾经被认为是作为参数传递给函数的元素空间突然被认为是一个元素空间,这些元素是其操作导致另一个元素的函数。要对它们进行评估的功能。
您可以将sin
之类的函数视为从数字到数字的无限地图,您为sin
提供一个数字,sin
会为您提供一些关联的数字,例如{{ 1}}或者什么。
但是你可以把数字3想象成从函数到数字的无限映射,你给3个函数sin(3)
,3给你一些相关的数字,即f
。
我找到了一些我希望突然查看"参数"或"元素"作为"功能调用诱导者"但大多数事情,例如我上面的lambda方法看起来很笨重。
我的另一个想法是为"元素编写包装类"发生这种情况。类似的东西:
f(3)
将打印from __future__ import print_function
class MyFloat(float):
def __call__(self, f):
return f(self)
m = MyFloat(3)
n = MyFloat(2)
MyFloat(m + n)(type)
MyFloat(m + n)(print)
和__main__.MyFloat
。
但是这需要大量的开销来重新定义数据模型操作符等等,显然,推动你自己版本的基本内容如5.0
并不是一个好主意,这将是无处不在的在大多数程序中。它也很容易弄错,就像我上面的例子一样,这样做:
float
答案 0 :(得分:2)
没有内置功能。仅仅因为这绝对不是一个常用的概念。而Python并不是为解决数学问题而设计的。
至于这里的实施,你可以得到最短的恕我直言:
rev_map = lambda x, seq: [f(x) for f in seq]
请注意,列表理解是如此简单和容易,首先用函数包装它似乎是不必要的。