我写了一个下面的小Python程序
def abc(x):
print(x)
Run Code Online (Sandbox Code Playgroud)
然后调用map(abc,[1,2,3])
但上面的地图功能刚刚显示
<map object at 0x0000000001F0BC88>
Run Code Online (Sandbox Code Playgroud)
而不是打印 x 值。
我知道 map 是 python 3 中的迭代器,但它仍然应该正确打印“x”值。这是否意味着当我们使用“map”时不会调用 abc(x) 方法?
映射迭代器延迟计算值,因此在迭代它们之前您不会看到输出。这是打印值的明确方法:
def abc(x):
print(x)
it = map(abc, [1,2,3])
next(it)
next(it)
next(it)
Run Code Online (Sandbox Code Playgroud)
该next函数调用it.__next__步进到下一个值。for i in it: # do something这是当您使用或从迭代器构造列表时在幕后使用的内容list(it),因此执行这些操作中的任何一个也会打印出值。
那么,为什么要懒惰呢?当处理非常大或无限的序列时它会派上用场。想象一下,如果您不是传递[1,2,3]给地图,而是传递itertools.count()给它。惰性允许您仍然迭代结果映射,而无需尝试预先生成所有(并且有无限多个)值。
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |