python匿名函数里用for_请问这段Python代码如何用匿名函数简化?

展开全部

楼主你5261好!

要解决这道题目并不难,4102只需要理解匿名lambda是如何使用的便可;

“lambda 表达式16531:表达式2”其实就是定义了一个函数,传入表达式1的参数,按表达式2的形式返回,因此,该语句也就返回了一个函数对象,请看如下代码:def demo(x):

return x*x

lambda_demo = lambda x:x*x

以上代码中demo函数和lambda_demo是等效的,都是可以调用的对象,传入一个参数,返回这个参数的平方。

那这题就不难解了,其实做的事情就是定义了两层:

1)第一层函数是传入一个参数,返回第二层定义的函数对象

2)第二层是不传入参数,返回第一层参数的平方

套用lambda的定义,便不难解出正确答案:# -*- coding: utf-8 -*-

def count():

'''这是原函数'''

def f(j):

def g():

return j*j

return g

fs = []

for i in range(1, 4):

fs.append(f(i))

return fs

def edited_count():

'''这是修改后的函数'''

fs= []

for i in range(1, 4):

fs.append((lambda x:(lambda :x*x))(i))

return fs

def evol_count():

'''更加pythonic的写法'''

return [(lambda x:(lambda :x*x))(i) for i in range(1,4)]

'''一行式写法'''

one_line_count = lambda :[(lambda x:(lambda :x*x))(i) for i in range(1,4)]

再分析一下楼主两段错误代码:

第一段的报错原因在于,楼主混淆了变量的有效空间,lambda中的变量只是形式,并不会对外部变量进行录入,所以在f函数中传入的j,并不会记录在lambda中,因此,在最后执行的时候,列表中的三个函数是第一段代码段中的demo函数,需要楼主传入一个参数,再返回你传入参数的平方。

第二段代码看代码逻辑应该是正确的,这个修改发生了什么呢?其实你定义的lambda函数形式变成了这样:def demo(x=1):

return x*x

也就是变相的把变量的值给定义了,出错的原因应该是你在调用的时候很可能是以这样的形式调用:count()() 才导致了报错。

希望楼主能够深入理解lambda以及python的命名空间,今后遇到这样的题目便能迎刃而解了。

望采纳,谢谢!~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值