我能画一张地图吗;“绑定”;方法使用python中的map()创建实例列表?

我能画一张地图吗;“绑定”;方法使用python中的map()创建实例列表?,python,functional-programming,Python,Functional Programming,functionalmap(func,iterable)可以很容易地应用于普通函数,但是如果我想将a_方法应用于实例列表,我该怎么做呢?我知道列表理解可以很快做到这一点,但我还是想看看是否存在一种功能性的方式,并且感觉像是pythonic class cls(object): def __init__(self,val): self.val=val def clstest(self,val): return self.val==val a=cls(

functional
map(func,iterable)
可以很容易地应用于普通函数,但是如果我想将
a_方法应用于实例列表,我该怎么做呢?我知道列表理解可以很快做到这一点,但我还是想看看是否存在一种功能性的方式,并且感觉像是pythonic

class cls(object):
    def __init__(self,val):
        self.val=val
    def clstest(self,val):
        return self.val==val
a=cls(9)
b=cls(18)
c=cls(19)
lst=[a,b,c]
然后执行以下操作:
list(map(repr,lst))
返回

['<__main__.Cls object at 0x00000000070EDB70>',
 '<__main__.Cls object at 0x00000000070EDBE0>',
 '<__main__.Cls object at 0x00000000070EDE80>']

更新:更正我在定义类时的错误。错误消息仍然存在。

您应该将函数包装在
lambda
中:

list(map(lambda instance: instance.clstest(10), lst))
或者正如你提到的,作为一个列表:

[instance.clstest(10) for instance in lst]

还有,这句话让我哭了:
lst=list([a,b,c])
应该是
lst=[a,b,c]
代码中的第一个单词应该是class,而不是def。 Python中公认的做法是提供类名(cls通常用于类方法)。你的凹痕需要修复

以下是未经测试的完整答案

class MyClass(object):
    def __init__(self,val):
        self.val=val
    def clstest(self,val):
        return self.val==val

objects = [MyClass(v) for v in (9, 18,19)]
map(lambda o: o.clstest(10), objects)
答案是-是的,你可以

另一种可能性(在

类cls(对象):
定义初始值(self,val):
self.val=val
def clstest(自身,val):
返回self.val==val
a=cls(9)
b=cls(10)
c=cls(19)
lst=[a,b,c]
#使用functools.partial
从functools导入部分
列表(地图(局部(cls.clstest,val=10),lst))

这就是你要找的吗

import operator
lst = [ cls(9), cls(18), cls(19) ]
x = operator.methodcaller('clstest', 10)
map( x, lst )

methodcaller
函数创建一个可调用的对象,该对象在其参数上调用一个命名方法,因此,例如
x(lst[0])
lst[0]相同。clstest(10)

首先,
def cls(object)
定义一个名为
cls
的函数,该函数使用一个名为
object的参数。如果您想要一个从
对象继承的类
,那么应该使用
类cls(对象)
。其次,在你的
地图中尝试
cls.clstest
,这是非常正确的(可能只是复制到SO中的一个打字错误),但我不相信它回答了OP的问题。@mhlester,我没有竞争答案-你已经提供了一个。你有没有试过你的-它对现在的定义有用吗?(顺便说一句,downvote不是我)。如果你没有回答这个问题,这应该是一个评论,而不是一个你也没有回答的答案——用错误的定义,你的答案是错误的useless@NathaneilCapital,因为clstest是在类的边界内定义的。请看我编辑的answerpartial在保存引用时很有用,在这种情况下这是对资源的浪费a
partial
对象只是一个包装器,类似于lambda,但具有更灵活的语义。这会起作用,但使用“``按名称调用方法似乎不是很“平滑”(pythonic?)。
import operator
lst = [ cls(9), cls(18), cls(19) ]
x = operator.methodcaller('clstest', 10)
map( x, lst )