慕无忌1623718
首先,感谢@李毅的回答,他回答的很好。1、初次执行那么,我们看看这个程序的运行结果是什么?fun=[(lambdan:i+n)foriinrange(10)]>>>fun[,,,,,,,,,]>>>len(fun)>>>10从运行的结果可以看出,fun参数是一个以函数对象为元素的列表,列表的长度为10。其中的长度是由步进函数range(10)来决定的。2、继续执行我们进行往下执行。>>>forfinfun:...f(1)...10101010101010101010结果出现了“意外”,并不是如想象中的那样,结果是相同的,没有步进。3、修改步进函数的值>>>fun=[(lambdan:i+n)foriinrange(2)]>>>fun[,]>>>fun=[(lambdan:i+n)foriinrange(3)]>>>fun[,,]>>>从上面的执行结果,我们可以明显的看出,步进函数决定了list的长度,但是这个list比较特别的地方是列表的元素是function对象,而对于function来说,就涉及到参数的作用域问题,而function对象里的i参数,明显是一个全局变量,@Jasoney说的很好,这个i参数随着步进函数range(10)的迭代,不断变化,最终确定值为9,那么function对象最终可以确定为lambadn:9+n,所以,最终的执行结果虽然“奇怪”,但也合乎逻辑。