Python常见面试题014.请说出下面的代码返回结果是什么?
1|0示例代码
- 答案是
2|0原因分析
-
调用函数fun(1, 5, 2, 0)
-
意味着
-
所在列表nums中是多个匿名函数
-
应该依次是
-
那按照我们的想法,nums[0]应该是lambda :1**2,调用应该得到1才是
-
但结果并不是这样的,
nums[0]()
得到的结果是range()结束值=5-1时的4**2 -
甚至从答案可以看出来
nums[1]()
也是 -
依次类推,fun(1, 5, 3, 1)=>
nums[1]()
=>结束值5-1=4的三次方=>64
-
所以规律是有了,道理何在?
-
看下代码
-
这是因为
num
不是 lambda 函数的内部变量,而是定义于外部作用域中的,并且num
是在调用 lambda 时访问的——而不是在定义时访问。循环结束时num
的值是4
,所以此时所有的函数都将返回4**2
,即16
3|0拓展
-
那要如何才能符合我们的预期呢?
nums[0]()
和nums[1]()
是不一样的 -
你可以将值保存在 lambda 局部变量,以使其不依赖于全局
num
的值 -
以上
n=num
创建了一个新的 lambda 本地变量n
,并在定义 lambda 时计算其值,使其与循环当前时点的num
值相同。这意味着n
的值在第 1 个 lambda 中为0
,在第 2 个 lambda 中为1
,在第 3 个中为2
,依此类推
以上参考
__EOF__

本文作者:博客已废弃
本文链接:https://www.cnblogs.com/wuxianfeng023/p/17272405.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/wuxianfeng023/p/17272405.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)