新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“python面试题实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python面试题实例代码分析”吧!
创新互联专业为企业提供高明网站建设、高明做网站、高明网站设计、高明网站制作等企业网站建设、网页设计与制作、高明企业网站模板建站服务,十年高明做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
def multiply(): return [lambda x: i * x for i in range(4)] print([m(100) for m in multiply()])
运行结果:
[300, 300, 300, 300]
上面代码的运行结果很容易被误判为[0, 100, 200, 300]
。首先需要注意的是multiply
函数用生成式语法返回了一个列表,列表中保存了4个Lambda函数,这4个Lambda函数会返回传入的参数乘以i
的结果。需要注意的是这里有闭包(closure)现象,multiply
函数中的局部变量i
的生命周期被延展了,由于i
最终的值是3
,所以通过m(100)
调列表中的Lambda函数时会返回300
,而且4个调用都是如此。
如果想得到[0, 100, 200, 300]
这个结果,可以按照下面几种方式来修改multiply
函数。
方法一:使用生成器,让函数获得i
的当前值。
def multiply(): return (lambda x: i * x for i in range(4)) print([m(100) for m in multiply()])
或者
def multiply(): for i in range(4): yield lambda x: x * i print([m(100) for m in multiply()])
方法二:使用偏函数,彻底避开闭包。
from functools import partial from operator import __mul__ def multiply(): return [partial(__mul__, i) for i in range(4)] print([m(100) for m in multiply()])
到此,相信大家对“python面试题实例代码分析”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!