为了账号安全,请及时绑定邮箱和手机立即绑定

我想从一个 lambda 返回两个值并分配给另一个,但我得到了错误

我想从一个 lambda 返回两个值并分配给另一个,但我得到了错误

动漫人物 2023-02-15 17:24:15
我曾尝试使用以下方法将值返回给 a 和 b(lambda a,b:print(a,b))((lambda x:(x,[int(i)**len(x) for i in x]))('153'))但这显示错误,我需要一些帮助来解决这个问题。TypeError: <lambda>() missing 1 required positional argument: 'b'
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

内部函数返回一个包含两个值的元组,但外部函数需要两个单独的值。使用*-unpacking将元组的每个值作为单独的参数传递:


#       v takes two parameters     v provides one tuple of two values

(lambda a,b:print(a,b))(*(lambda x:(x,[int(i)**len(x) for i in x]))('153'))

#                       ^ unpack operator

请注意,它print已经采用了位置参数——(lambda a,b:print(a,b))可以只替换为print. 此外,Python3.8 引入了:=赋值运算符,它通常可以用来代替 alambda来模拟let表达式。这显着缩短了表达式:


# v print takes multiple arguments

print(*(x := '153', [int(i)**len(x) for i in x]))

#         ^ assignment operator binds in current scope


查看完整回答
反对 回复 2023-02-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

使用给定的结构发布了正确答案。但是,我想不出像您那样使用两个 lambda 会有用的情况。定义一个函数将使代码更具可读性:


def print_values(string):

    values = [int(i)**len(string) for i in string]

    print(string, values)


print_values("153")

或者如果你想让它更短:


def print_values(string):

    print(string, [int(i)**len(string) for i in string])


print_values("153")


查看完整回答
反对 回复 2023-02-15
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信