当前位置: 首页 > 面试题库 >

在Python中的对象上应用功能列表

葛永丰
2023-03-14
问题内容

有没有一种干净的方法可以在没有lambda或列表理解的情况下在Python对象上应用函数列表?就像Haskell表达式一样:

map ($ obj) [foo1,foo2]

在Python中使用lambda的示例:

response = map(lambda foo:foo(obj),[foo1,foo2]) #fooX:object->Bool

它可以扩展到类函数吗?

也许来自运算符或itertools的东西?


问题答案:

我认为这应该符合您的“职能”标准,要回答您的问题,我认为没有一种干净的方法,您应该适应列出理解。

如@JFSebastian所建议

>>> from operator import methodcaller
>>> funcs = (lambda x: x + 1, lambda x: x + 2)
>>> obj = 5
>>> list(map(methodcaller('__call__', obj), funcs))
[6, 7]

这是一种疯狂的方式:

>>> from itertools import starmap, repeat
>>> from types import FunctionType
>>> funcs = (lambda x: x + 1, lambda x: x + 2)
>>> obj = 5
>>> list(starmap(FunctionType.__call__, zip(funcs, repeat(obj))))
[6, 7]

如@AleksiTorhamo所建议

>>> from itertools import repeat
>>> from types import FunctionType
>>> obj = 5
>>> funcs = (lambda x: x + 1, lambda x: x + 2)
>>> list(map(FunctionType.__call__, funcs, repeat(obj)))
[6, 7]


 类似资料:
  • 假设我在Mongoose模式上有这个数组属性(“articles”): 我如何使用 $addToSethttps://docs.mongodb.org/manual/reference/operator/update/addToSet/ 要通过检查hashtag的值来添加到此数组,以查看它是否唯一? 例如,如果我想将以下对象添加到上述数组中,我希望Mongo将其作为副本“拒绝”: 因为hashta

  • 问题内容: 说我在猫鼬模式上有这个数组属性(“文章”): 我该怎么用 $ addToSet https://docs.mongodb.org/manual/reference/operator/update/addToSet/ 通过检查主题标签的值以查看其是否唯一来添加到此数组? 例如,如果我要将以下对象添加到上述数组中,则希望Mongo将其“重复”删除: 因为hashtag = foo已经被使用

  • 问题内容: 考虑以下数据框: 以下命令起作用: 但以下任何一项均无效: 为什么? 文档中的示例似乎建议通过调用transform组,可以进行行操作处理: 换句话说,我认为转换本质上是一种特定的应用类型(不聚合的类型)。我哪里错了? 供参考,以下是上面原始数据帧的构造: 问题答案: apply和之间的两个主要区别transform 和方法之间有两个主要区别。 输入: 将每个组的所有列作为DataFr

  • 问题内容: 我想计算不超过n的平方和。假设n为4,则此代码生成一个列表,列出范围为0到4的地图对象: 轻松一点。现在在m上调用列表,然后求和: 意外的行为是,如果我再次运行最后一行,则总和为0: 我怀疑这是因为调用返回了一个空列表,但是我找不到这种行为的解释。有人可以帮我这个忙吗? 问题答案: 在Python 3中返回一个有状态的迭代器。有状态的迭代器在耗尽后可能只消耗一次,并且不产生任何值。 在

  • 我是Python的新手,遵循教程。教程中有一个的例子: 现在,在教程中,。但在我的例子中,我得到了以下错误: 请告诉我我错在哪里。我搜索所以这个,但它是不同的。

  • 问题内容: 假设我正在创建一个简单的类以类似于C样式的结构工作,只保存数据元素。我试图弄清楚如何在对象列表中搜索属性等于某个值的对象。下面是一个简单的示例,以说明我要执行的操作。 例如: 我将如何搜索myList列表以确定它是否包含n == 5的元素? 我一直在谷歌搜索和搜索Python文档,我想我可以通过列表理解来做到这一点,但是我不确定。我可能还要补充一点,我必须使用Python 2.4.3,