[英]i want to return two values from one lambda and assign to the other one but i got error
我曾嘗試使用以下方法將值返回給 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'
內部 function 返回兩個值的單個元組,但外部 function 需要兩個單獨的值。 使用*
-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
已經占據了位置 arguments - (lambda a,b:print(a,b))
可以僅替換為print
。 此外,Python3.8 引入了:=
賦值運算符,它通常可以用來代替lambda
來模擬let
表達式。 這顯着縮短了表達式:
# v print takes multiple arguments
print(*(x := '153', [int(i)**len(x) for i in x]))
# ^ assignment operator binds in current scope
@MisterMiyagi 使用給定的結構發布了正確答案。 但是,我想不出以您的方式使用兩個 lambda 表達式會有用的情況。 定義 function 將使代碼更具可讀性:
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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.