python 函数的一道面试题

                           一道很有意思的面试题’
def func():
    acts=[]
    for i in range(5):
        acts.append(lambda x:i**x)
    return acts
acts=func()
print(acts[0](2))
print(acts[1](2))
print(acts[2](2))
print(acts[3](2))

猜猜看结果是什么?
相信很多人的答案都是:0,1,4,9
但实际结果是:16,16,16,16
为什么?
acts返回的是一个全是lambda表达式的列表,给x赋值后调用lambda表达式,按常规思想是直接调用每一个不同的i,但是由于嵌套作用域中的变量只有在该嵌套函数被调用时才进行查找参数的值,所有后面每次调用的都是在最后一次循环迭代中循环变量的值,也就是说每次i的值都是4,所有结果就不是我们所想的那样。那么,如何实现想要的结果?

def func():
    acts=[]
    for i in range(5):
        acts.append(lambda x,i=i:i**x)
    return acts
acts=func()
print(acts[0](2))
print(acts[1](2))
print(acts[2](2))
print(acts[3](2))

经过修改,将每次的i赋值给默认参数i,这样调用的时候就可以调用到所需的i,结果也变成了想要的结果:0,1,4,9

#结语:新手练手之作,不满之处敬请见谅#


`‘’

 


                                                 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值