Python中any()为何对斐波那契序列生效?a、b结果不同原因解析
为什么变量b的操作无法生成斐波那契序列?
先看代码运行结果:
a = [0,1] b = [0,1] any(map(lambda _:a.append(sum(a[-2:])), range(2,8))) map(lambda _:b.append(sum(b[-2:])), range(2,8)) print(a) # 输出: [0, 1, 1, 2, 3, 5, 8, 13] print(b) # 输出: [0, 1]
核心原因是Python的map函数是惰性求值的:
- map返回的是一个迭代器对象,它不会立刻执行传入的lambda函数,只有当你主动遍历这个迭代器时,里面的逻辑才会真正运行。
再拆解两个变量的处理逻辑:
- 对于变量a:
any()函数会遍历map返回的迭代器,逐个执行lambda里的a.append()。由于append()方法返回的是None(属于假值),any()会一直遍历到迭代器结束,直到找不到真值,所以所有追加操作都被执行,a生成了完整的斐波那契序列。 - 对于变量b:只调用了
map()但没有遍历它返回的迭代器,lambda里的b.append()根本没被执行,所以b还是初始的[0,1]。
如果要让b的操作生效,可以主动遍历迭代器,比如用list()包裹:
list(map(lambda _:b.append(sum(b[-2:])), range(2,8)))
内容的提问来源于stack exchange,提问作者Pedro Dominguez
相关产品推荐
相关产品推荐

