簡體   English   中英

我想從一個 lambda 返回兩個值並分配給另一個,但我得到了錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM