登陆

章鱼彩票 下载-我太难了!这一道Python面试题、竟让我置疑人生

admin 2020-02-14 150人围观 ,发现0个评论

无意间,看到这么一道Python面试题:以下代码将输出什么?

脑中静静一想,这还用说么,肯定是:


0

2

4

6

终究一看答案,竟然是:


6

6

6

6

所以带着置疑的心态(其实是不服输,不认错),翻开编辑器,快速一敲,果然是:

置疑了人生半响,原本还想黑,WTF Python…然后才想通是自己太陌生......

终究发现原因竟章鱼彩票 下载-我太难了!这一道Python面试题、竟让我置疑人生是:Python 的闭包的后期绑定导致的 late binding,这意味着在闭包中的变量是在内部函数被调用的时分被查找。所以成果是,当任何 testFun() 回章鱼彩票 下载-我太难了!这一道Python面试题、竟让我置疑人生来的函数被调用,在那时,i 的值是在它被调用时的周围效果域中查找,到那时,不章鱼彩票 下载-我太难了!这一道Python面试题、竟让我置疑人生论哪个回来的函数被调用,for 循环都现已完成了,i 终究的值是 3,因而,每个回来的函数 testFun 的值都是 3。因而一个等于 2 的值被传递进以上代码,它们将回来一个值 6 (比方: 3 x 2)。

终究怎么才干实现出这样的成果呢?


0

2

4

6

想了想,若能当即绑月经前几天是安全期定参数,或许直接不必闭包总该行吧,用另一种方法防止 i 的改写。

回想了之前所学常识,终究酝酿出了四种解决方案:

第一种:创立一个闭包,经过运用默许参数当即绑定它的参数

第二种:运用functools.partial 函数,把函数的某些参数(不论有没有默许值)给固定住(也便是相当于设置默许值)

第三种:高雅的写法,章鱼彩票 下载-我太难了!这一道Python面试题、竟让我置疑人生直接用生成器

第四种:使用yield的慵懒求值的思维

终究运转成果:

有了解决方案后,又陷入了置疑自己,这个标题终究是调查的是什么?是在考面试者闭包相关常识以及Python 的闭包的后期绑定问题么?

终究:如果有需求python学习教程和更多python面试题的小伙伴,

获取方法:请我们转发本文+重视并私信小编 “ 学习 ”,即可获取。

获取方法:请我们转发本文+重视并私信小编 “ 材料 ”,即可获取。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP