街机捕鱼首页 | XML地图 | RSS订阅 | 站点导航 欢迎光临 街机捕鱼

当前位置:主页 > 新闻 >

Python陷阱:闭包中延迟绑定!80%的面试者不知道自己的错误

时间:2020-06-06 | 来源:街机捕鱼 | 作者:街机捕鱼 | 阅读:6446次 |

这个陷阱是更有迷惑性!大部分人都会掉进去,这就是Python在闭包作用域中绑定变量的方式~~

我们有一个函数是squares,里面有一个3个匿名函数,每个匿名函数是返回i的平方数.看起来好像也满简单的,返回平方数嘛

接着我们用一个for循环得到每一个square函数,然后给这个square输入一个2.也就是说x为2.我们期望的结果是:0,1,2

0*2=01*2=22*2=4

但是实际上的结果是:

444

为啥会这样的呢,闭包本来街机捕鱼就是Python里面一个比较难理解的概念,经常和函数装饰器搞在一起,再加上一个匿名函数,头都昏了!我们来换一下普通函数方式来理解:

Python的闭包是延迟绑定,也就是说闭包中用到的变量的值,是在内部函数被调用的时候才查询得到的。

res里面包含了闭包函数make_square,这个闭包比较牛逼,它会对延伸到函数的作用域外边,也就是包含了对变量i的绑定,街机捕鱼最后一次查询i的值为2.

正确的做法:

i因为闭包延迟绑定才会造成上面的问题,解决的办法就是给它立刻绑定,就搞定了.

Python的学习道路上有很多好玩的有趣的风景,也有很多坑,欢迎大家一起讨论,如果你有问题,也欢迎来撩!

结尾

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的街机千炮捕鱼python脚本到web开发、爬虫、数据分析、街机千炮捕鱼数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:01即可领取。

(责任编辑:街机捕鱼) 本文地址:/xinwen/20200606/5855.html

街机捕鱼精心筛选编辑,将最精华的内容共享并无私奉献给大家!