lambda在python_lambda在python中返回lambda

swap = lambda a,x,y:(lambda f=a.__setitem__:(f(x,(a[x],a[y])),

f(y,a[x][0]),f(x,a[x][1])))()

看到末尾的()了吗?内部的lambda没有返回,它被称为。在

函数的作用相当于

^{pr2}$

但是我们假设我们要在一个lambda里做这个。我们不能在lambda中使用赋值。{cd1>然而,我们可以称之为相同的效果。在def swap(a, x, y):

a.__setitem__(x, (a[x], a[y]))

a.__setitem__(y, a[x][0])

a.__setitem__(x, a[x][1])

但是对于lambda,我们只能有一个表达式。但由于这些是函数调用,我们可以将它们封装在元组中def swap(a, x, y):

(a.__setitem__(x, (a[x], a[y])),

a.__setitem__(y, a[x][0]),

a.__setitem__(x, a[x][1]))

但是,所有这些__setitem__的都让我失望,所以让我们把它们分出来:def swap(a, x, y):

f = a.__setitem__

(f(x, (a[x], a[y])),

f(y, a[x][0]),

f(x, a[x][1]))

达纳米特,我不能再增加一个任务!我知道让我们滥用默认参数。在def swap(a, x, y):

def inner(f = a.__setitem__):

(f(x, (a[x], a[y])),

f(y, a[x][0]),

f(x, a[x][1]))

inner()

好,我们换到lambdas:swap = lambda a, x, y: lambda f = a.__setitem__: (f(x, (a[x], a[y])), f(y, a[x][0]), f(x, a[x][1]))()

这让我们回到原来的表达式(加/减错别字)

所有这些都引出了一个问题:为什么?

该功能应作为def swap(a, x, y):

a[x],a[y] = a[y],a[x]

原作者特意使用了lambda而不是函数。可能是因为某种原因他不喜欢嵌套函数。我不知道。我要说的是它的坏代码。(除非有一个神秘的理由。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值