Python中map函数针对函数列表的用法疑问
解析这段Python代码的执行逻辑
首先先把你的代码贴出来方便参考:
def multiply(x): return (x*x) def add(x): return (x+x) funcs = [multiply, add] for i in range(5): value = list(map(lambda x: x(i), funcs)) print(value)
先理清几个关键前提
multiply(x)和add(x)是两个简单的函数:前者返回输入值的平方,后者返回输入值的两倍。funcs = [multiply, add]这个列表里存储的是函数对象本身,而不是函数调用后的结果。也就是说,这里的multiply是函数的引用,而不是multiply(某个值)的计算结果。
循环与map函数的执行过程
循环for i in range(5)会让i依次取0,1,2,3,4这五个值,每次循环里的核心是list(map(lambda x: x(i), funcs)),咱们逐个分析每个i的执行情况:
当i=0时
map函数会遍历funcs中的每个函数,把lambda x: x(i)应用到每个函数上:
- 第一个元素是
multiply:lambda中的x就是multiply,执行x(i)即multiply(0),结果是0*0=0 - 第二个元素是
add:执行add(0),结果是0+0=0
最终得到列表[0, 0],打印输出。
当i=1时
multiply(1)计算得1*1=1add(1)计算得1+1=2
得到列表[1, 2],打印输出。
当i=2时
multiply(2)计算得2*2=4add(2)计算得2+2=4
得到列表[4, 4],打印输出。
当i=3时
multiply(3)计算得3*3=9add(3)计算得3+3=6
得到列表[9, 6],打印输出。
当i=4时
multiply(4)计算得4*4=16add(4)计算得4+4=8
得到列表[16, 8],打印输出。
总结map在这里的作用
你已经知道map是把第一个参数的函数应用到第二个参数的每一项,这里的特殊点在于:
- map的第二个参数是函数列表,而不是普通的数值列表
- 第一个参数的lambda函数
lambda x: x(i),其实是接收一个函数x,然后调用这个函数并传入当前的i作为参数
所以整个过程就是,每次循环都让funcs里的两个函数,分别用当前的i作为输入执行一遍,把结果收集成列表后打印。
内容的提问来源于stack exchange,提问作者Arsh Khan
相关产品推荐
相关产品推荐

