猿问

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

我曾尝试使用以下方法将值返回给 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'


动漫人物
浏览 117回答 2
2回答

皈依舞

内部函数返回一个包含两个值的元组,但外部函数需要两个单独的值。使用*-unpacking将元组的每个值作为单独的参数传递:#&nbsp; &nbsp; &nbsp; &nbsp;v takes two parameters&nbsp; &nbsp; &nbsp;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'))#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^ unpack operator请注意,它print已经采用了位置参数——(lambda a,b:print(a,b))可以只替换为print. 此外,Python3.8 引入了:=赋值运算符,它通常可以用来代替 alambda来模拟let表达式。这显着缩短了表达式:# v print takes multiple argumentsprint(*(x := '153', [int(i)**len(x) for i in x]))#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^ assignment operator binds in current scope

吃鸡游戏

使用给定的结构发布了正确答案。但是,我想不出像您那样使用两个 lambda 会有用的情况。定义一个函数将使代码更具可读性:def print_values(string):&nbsp; &nbsp; values = [int(i)**len(string) for i in string]&nbsp; &nbsp; print(string, values)print_values("153")或者如果你想让它更短:def print_values(string):&nbsp; &nbsp; print(string, [int(i)**len(string) for i in string])print_values("153")
随时随地看视频慕课网APP

相关分类

Python
我要回答