2008-10-02 72 views
10

Tôi hiểu hàm lambda là gì trong Python, nhưng tôi không thể tìm thấy ý nghĩa của "ràng buộc lambda" bằng cách tìm kiếm tài liệu Python. Một liên kết để đọc về nó sẽ là tuyệt vời. Một ví dụ giải thích tầm thường sẽ còn tốt hơn nữa. Cảm ơn bạn."Ràng buộc lambda" trong Python là gì?

Trả lời

13

Thứ nhất, một định nghĩa chung:

Khi một chương trình hoặc chức năng tuyên bố được thực thi, các giá trị hiện tại của thông số chính thức được lưu (trên ngăn xếp ) và trong phạm vi của tuyên bố , chúng được ràng buộc với các giá trị của các đối số thực tế được thực hiện trong cuộc gọi. Khi tuyên bố là đã thoát, các giá trị ban đầu của các đối số chính thức đó sẽ được khôi phục . Giao thức này hoàn toàn đệ quy. Nếu trong phạm vi phần thân của một tuyên bố, thì có nghĩa là được thực hiện khiến các tham số chính thức bị ràng buộc lại, với giá trị mới, sơ đồ liên kết lambda đảm bảo rằng điều này sẽ xảy ra theo trật tự .

Bây giờ, có một tuyệt vời python example in a discussion here:

" ... chỉ có một ràng buộc cho x: làm x = 7 chỉ thay đổi giá trị trong tồn tại trước đó ràng buộc Đó là lý do

def foo(x): 
    a = lambda: x 
    x = 7 
    b = lambda: x 
    return a,b 
.

trả về hai hàm trả về 7, nếu có một ràng buộc mới sau x = 7, hàm sẽ trả về các giá trị khác nhau [giả sử bạn không gọi foo (7), tất nhiên. Ngoài ra giả định nested_scopes] .... "

+0

Liên kết đầu tiên đã chết –

1

Bạn đã thấy cụm từ được sử dụng ở đâu?

"Ràng buộc" bằng Python thường dùng để chỉ quá trình mà một tên biến kết thúc trỏ đến một đối tượng cụ thể, cho dù bằng cách chuyển nhượng hoặc qua tham số hoặc một số phương tiện khác, ví dụ:

a = dict(foo="bar", zip="zap", zig="zag") # binds a to a newly-created dict object 
b = a # binds b to that same dictionary 

def crunch(param): 
    print param 

crunch(a) # binds the parameter "param" in the function crunch to that same dict again 

Vì vậy, tôi sẽ đoán rằng "lambda ràng buộc" đề cập đến quá trình ràng buộc một hàm lambda đến một tên biến, hoặc có thể ràng buộc các tham số được đặt tên của nó cho các đối tượng cụ thể? Có một lời giải thích khá tốt của ràng buộc trong tham khảo Ngôn ngữ, tại http://docs.python.org/ref/naming.html

7

Tôi chưa bao giờ nghe thuật ngữ đó, nhưng một lời giải thích có thể là "thông số mặc định" hack được sử dụng để gán giá trị trực tiếp cho tham số lambda. Sử dụng ví dụ của Swati:

def foo(x): 
    a = lambda x=x: x 
    x = 7 
    b = lambda: x 
    return a,b 

aa, bb = foo(4) 
aa() # Prints 4 
bb() # Prints 7 
+0

Số 4 đến từ đâu? – mattbasta

+0

+1: Tôi chắc chắn thông tin này là những nơi khác, nhưng đây chính xác là những gì tôi cần .. ôm lớn !!! –

Các vấn đề liên quan