知行编程网知行编程网  2022-05-03 03:00 知行编程网 隐藏边栏 |   抢沙发  35 
文章评分 0 次,平均分 0.0

一道3行代码的python面试题,我懵逼了...

前言

今天来说说交流群里一位群友问的Python题目。刚开始由于没有电脑,我也没有运行出来,之后查阅了一下资料才知道里面的知识还挺多的。废话不多说,我们直接开始。

一道3行代码的python面试题,我懵逼了...

有意思的题目

题目:写出下面程序运行结果

正确答案:

第一眼看,不就是匿名函数吗?但是仔细想想匿名函数在平时的开发中没怎么用,所以也忘的差不多了。例如那个m(2)当时就不懂是啥意思了。

好,我们就来看看这个题目,首先第一段代码:

这是一个典型的列表推导式,简而言之就是在列表中推导计算并且将计算的结果放入列表,上面这串代码我们可以写成:

这样可能看的更加的简单明了。但是这里面也有一个匿名函数,计算i*x的值,如果大家对匿名函数不太懂的,可以去翻阅相关资料了解一下。

我们接下来看这段代码:

其实这段代码也很好理解,m(2)的意思就是将2作为参数传入上面的匿名函数当中,但是为什么结果等于[6,6,6,6]呢?

我们来debug一下看看:

一道3行代码的python面试题,我懵逼了...
断点,开始debug
一道3行代码的python面试题,我懵逼了...
跳到了multipliers函数当中
一道3行代码的python面试题,我懵逼了...
仍然在循环体中
一道3行代码的python面试题,我懵逼了...
一道3行代码的python面试题,我懵逼了...
运行到3,循环即将结束
一道3行代码的python面试题,我懵逼了...
跳转下来
一道3行代码的python面试题,我懵逼了...
重新进入匿名函数计算
一道3行代码的python面试题,我懵逼了...
计算

这里我省略了几张图,因为结果都是i=3 ,x=2,所以相乘自然为6。

相信大家看到这里仍然有很多的疑问,为什么i最后等于3?

其实这里涉及到闭包函数的概念,什么是闭包函数呢?

当前函数引用到上一层函数局部命名空间的变量时就会触发闭包规则。我们说触发了闭包的函数叫做闭包函数,但是要注意一点:只有当调用闭包函数的时候才会去引用外层函数的变量,因为在调用闭包函数之前,闭包内部的命名空间还不存在。

我们用这种方法来看待这个闭包函数lambda x:i*x,为什么称它为闭包函数呢?因为当执行lambda x:i*x这串代码时调用了上一层函数multipliers()的局部命名空间的变量i,所以此处是闭包函数。

但是此时的列表中并不是匿名函数计算出来的值,因为此时还没有被调用,此时列表中只是有四个匿名函数的内存地址:

一道3行代码的python面试题,我懵逼了...

那什么时候才算真正调用呢?在上面我们讲过

这串代码将2作为参数传入上面的匿名函数当中,此时也就是调用了匿名函数。当去调用的时候,for i in range(4)这个循环已经执行完毕,此时的i已经是3了,所以就有了最后的结果:


总结

其实很多题目都是出自一些我们平时不是很重视的知识点上,但是往往这些知识点非常重要。所以学习的时候,对于重点知识不能因为不使用它而去遗忘,而是要多去看看。非常感谢大家能够看完这篇文章,如果在看数超过30,我会写一篇匿名函数专题的文章给大家!

本文部分知识参考了:

https://blog.csdn.net/weixin_34007291/article/details/88755406

<p style="margin-right: 8px;margin-left: 8px;"><span style="font-size: 15px;"><strong>近期热门:</strong><br  /></span></p><p style="margin: 10px 8px 5px;padding-right: 0em;padding-left: 0em;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;white-space: normal;widows: 1;word-spacing: 10px;letter-spacing: 1.5px;line-height: normal;"><span style="color: rgb(0, 122, 170);font-size: 15px;">● </span><span style="color: rgb(0, 122, 170);font-size: 15px;text-decoration: underline;">我的神!用Python竟然还能做一个文字套娃</span></p><p style="margin: 10px 8px 5px;padding-right: 0em;padding-left: 0em;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;white-space: normal;widows: 1;word-spacing: 10px;letter-spacing: 1.5px;line-height: normal;"><span style="color: rgb(0, 122, 170);font-size: 15px;">● </span><span style="color: rgb(0, 122, 170);font-size: 15px;text-decoration: underline;">2020年5月编程语言排行榜,Python竟然排老三</span></p><p style="margin: 10px 8px 5px;padding-right: 0em;padding-left: 0em;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;white-space: normal;widows: 1;word-spacing: 10px;letter-spacing: 1.5px;line-height: normal;">● 我珍藏的一些好的Python代码,技巧|上篇</p><p style="margin: 10px 8px 5px;padding-right: 0em;padding-left: 0em;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;white-space: normal;widows: 1;word-spacing: 10px;letter-spacing: 1.5px;line-height: normal;"><span style="color: rgb(0, 122, 170);font-size: 15px;">● <span style="text-decoration: underline;">爬取300本Python书籍,用Python告诉你哪家强?</span></span></p><p style="margin: 10px 8px 5px;padding-right: 0em;padding-left: 0em;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;white-space: normal;widows: 1;word-spacing: 10px;letter-spacing: 1.5px;line-height: normal;"><span style="color: rgb(0, 122, 170);font-size: 15px;">● </span><span style="color: rgb(0, 122, 170);font-size: 15px;text-decoration: underline;">卧槽!Pdf转Word用Python轻松搞定!</span></p><p style="margin: 10px 8px 5px;padding-right: 0em;padding-left: 0em;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;white-space: normal;widows: 1;word-spacing: 10px;letter-spacing: 1.5px;line-height: normal;"><span style="font-size: 15px;"><span style="color: rgb(0, 122, 170);">● </span><span style="color: rgb(0, 122, 170);text-decoration: underline;">我打赌,学会这6招,谁再敢笑你的Python程序慢!</span></span></p>


点击阅读原文,阅读菜鸟B站7个原创视频

本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享