- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定下面的代码为何有效。根据文档,map 仅将一个函数作为第一个参数并将其应用于一个或多个可迭代对象,具体取决于该函数采用的参数数量。
map(函数,可迭代..)
但是,您可以传递多个函数来代替可迭代对象,并且它们会以某种方式被视为可迭代对象。这条线以某种方式采用函数 add、square 和 str 并将它们视为可迭代对象。
如何将函数视为有效的可迭代对象?
def add(x):
return x + x
def square(x):
return x * x
nums = [1, 2, 3, 4, 5]
for i in nums:
vals = list(map(lambda x: x(i), (add, square, str)))
print(vals)
返回:
[2, 1, '1']
[4, 4, '2']
[6, 9, '3']
[8, 16, '4']
[10, 25, '5']
*编辑马丁回答了这个问题。此代码执行相同的操作,但将其从 lambda 函数中分离出来,显示 add、square、str
是如何迭代的函数。
def add(x):
return x + x
def square(x):
return x * x
def act_on_iter(iter_obj, i):
return iter_obj(i)
nums = [1, 2, 3, 4, 5]
for i in nums:
vals = list(map(act_on_iter, (add, square, str), [i] * 3))
print(vals)
返回相同的
[2, 1, '1']
[4, 4, '2']
[6, 9, '3']
[8, 16, '4']
[10, 25, '5']
最佳答案
您正在传递一个可调用对象的迭代:
(add, square, str)
那是一个元组,而元组是可迭代的。可迭代对象内部是什么并不重要,在 Python 中,函数是一流的对象,就像字符串和整数以及类和实例一样。您可以传递函数,包括将它们存储在元组中。
然后你有一个 lambda
可调用:
lambda x: x(i)
它获取可迭代对象中的每个项目,并将它们也视为可调用对象。 x
设置为 add
,然后设置为 square
,然后设置为 str
,lambda
调用每个传入的 i
。同样,函数只是另一种类型的对象,您可以将一个函数作为参数值传递给另一个函数,这里接收函数对象的参数名为 x
。表达式 x(i)
然后调用分配给 x
的任何内容。
如果您将 lambda
替换为 print
(没有 ()
括号,我们引用的是函数对象),那么您会看到:
>>> list(map(print, (add, square, str)))
<function add at 0x11645a670>
<function square at 0x11645a790>
<class 'str'>
[None, None, None]
[None, None, None]
列表是调用 print()
三次的结果,该函数始终返回 None
。有趣的部分是 [None, None, None]
之前的输出,这些是 (add, square, str)
中三个函数中每一个的字符串表示元组。
在您的示例代码中,您有一个 for
循环遍历 nums
,将每个值分配给 i
,因此 1
, 2
, 3
等。所以你看到的实际输出是通过重复使用 map()
产生的,如 i
变化:
i = 1
, -> [add(1), square(1), str(1)]
-> [2, 1, ' 1']
i = 2
, -> [add(2), square(2), str(2)]
-> [4, 4, ' 2']
i = 3
, -> [add(3), square(3), str(3)]
-> [6, 9, ' 3']
i = 4
, -> [add(4), square(4), str(4)]
-> [8, 16, ' 4']
i = 5
, -> [add(5), square(5), str(5)]
-> [10, 25, ' 5']
关于python - 在 Python 3 map() 中使用多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59181938/
我正在尝试从一个 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 m
我是 Haskell 的新手,我认为函数 map map和 map.map在 Haskell 中是一样的。 我的终端给了我两种不同的类型, (map.map) :: (a -> b) -> [[a]
我的目标是创建一个 map 的 map ,这样我就可以通过它的键检索外部 map 的信息,然后通过它们的键访问它的“内部” map 。 但是,当我得到每个内部映射时,我最初创建的映射变成了一个对象,我
如何使用 Java8 编写以下代码? for (Entry> entry : data.entrySet()) { Map value = entry.getValue(); if (valu
我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于(准确地)将地图切成图块。 我
所以我有 2 std::map s >一个是“旧的”,一个是“新的”,我想知道哪些文件被删除了,这样就能够遍历差异并对 shared_ptr 做一些事情。这样的事情可能吗?如何做到? 最佳答案 虽然
是否可以将当前查看的 google.maps.Map 转换为静态图像链接,以便我可以获取图像并将其嵌入到 PDF 中? 我在 map 上添加了一些带有自定义图标的标记,所以我不确定这是否真的可行。 如
你能帮我吗 Java Streams ? 从标题可以看出我需要合并List>>进入Map> . 列表表示为List>>看起来像: [ { "USER_1":{
对于 idAndTags 的第二个条目,内部映射被打乱,但第一个条目则不然 第一次接近! for (Map.Entry> entryOne : idAndTags.entrySet()) {
我将从我的代码开始,因为它应该更容易理解我想要做什么: @function get-color($color, $lightness) { @return map-get(map-get($col
我过去曾在许多网站上使用过 Google map ,但遇到了以前从未遇到过的问题。 map 窗口正在显示,但它只显示左上角的 map 片段,以及之后的任何内容(即使我在周围导航时),右侧也不会加载任何
众所周知,这些 map ,无论是常规街道 map 还是卫星 map ,在中国的特定地区都无法正确排列。那么哪个 map 排列正确,是卫星 map 还是默认街道 map ?一些网站表明卫星 map 是正
在拖尾事件之后,我面临着获取此处 map 中的 map 边界的问题。我需要新的经纬度来在新更改的视口(viewport)中获取一些项目/点。我只是想在拖动结束时获得谷歌地图map.getBounds(
我想做的是通过 ajax API 显示以英国邮政编码为中心的小型 bing 生成 map 。我相信这是可能的;我在 Bing map 文档中找不到如何将英国邮政编码转换为可以插入 map Ajax 控
我有一个 List我想转换成的 e Map>其中外部字符串应为“Name”,内部字符串应为“Domain”。 Name Id Domain e(0) - Emp1, 1, Insuran
我的第 2 部分:https://stackoverflow.com/questions/21780627/c-map-of-maps-typedef-doubts-queries 然后我继续创建 I
是否可以在 1 行中使用 Java8 编写以下所有 null 和空字符串检查? Map> data = new HashMap<>(holdings.rowMap()); Set>> entrySet
我正在审查一个项目的旧代码,并使用 Map 的 Map 的 Map 获得了如下数据结构(3 层 map ): // data structure Map>>> tagTree
这可能是一种不好的做法,但我还没有找到更好的解决方案来解决我的问题。所以我有这张 map // Map>> private Map>> properties; 我想初始化它,这样我就不会得到 Null
我们在 JDK 1.7 中使用 HashMap,我在使用 SonarQube 进行代码审查时遇到了一些问题。 请考虑以下示例: public class SerializationTest imple
我是一名优秀的程序员,十分优秀!