2013-05-21 27 views
19

Tôi biết lambda không có biểu thức trả về. Thông thườngpython - lambda có thể có nhiều hơn một return

def one_return(a): 
    #logic is here 
    c = a + 1 
    return c 

có thể được viết:

lambda a : a + 1 

Làm thế nào về ghi thế này ở một hàm lambda:

def two_returns(a, b): 
    # logic is here 
    c = a + 1 
    d = b * 1 
    return c, d 
+9

Đó không phải là nhiều hơn một lần trả lại, nó thậm chí không trở về một lần với nhiều giá trị. Đó là một sự trở lại với một giá trị (đó là một tuple). – delnan

+1

Nhận xét +1 @ delnan, đây là lý do chính khiến tôi không thích quảng cáo của Python là ',' để phân phối khắp nơi. Nó làm xáo trộn những gì đang diễn ra. – Izkata

+5

@Izkata Cái gì? ',' không phải là "được đẩy lên tuple", đó là nghĩa đen là cú pháp để tạo tuple. Và đó là IMHO hoàn toàn rõ ràng. – delnan

Trả lời

27

Có, có thể. Bởi vì một biểu thức như thế này ở phần cuối của một hàm:

return a, b 

là tương đương với điều này:

return (a, b) 

Và ở đó, bạn đang thực sự trả về một giá trị duy nhất: một tuple đó xảy ra để có hai yếu tố. Vì vậy, có thể có một lambda trả về một bộ tuple, vì đó là một giá trị duy nhất:

lambda a, b: (a, b) # here the return is implicit 
+3

nói cách khác, đó là vấn đề được ưu tiên. ',' có mức ưu tiên thấp hơn 'lambda' – newacct

14

chắc:

lambda a, b: (a + 1, b * 1) 
9

gì về:

lambda a,b: (a+1,b*1) 
Các vấn đề liên quan