2011-11-08 25 views
6

Hàm này f chấp nhận một danh sách đối số và trả về một hàm có thể gọi khác với cùng một danh sách đối số, để các hàm khác có thể được áp dụng cho nó.Tổ hợp này có tên không?

from operator import add, mul 

def f(*a, **kw): 
    return lambda g: g(*a, **kw) 

map(f(3, 10), (add, mul)) # -> [13, 30] 

Bạn gọi số f là gì? Đây có phải là một combinator của một số loại?

Trả lời

4

Bộ kết hợp là hình thức curried của apply. So với hàm được tích hợp (không được chấp nhận) apply, f đảo ngược thứ tự của các đối số hữu ích hơn, cung cấp thứ giống như một hàm kép cho hàm functools.partial.

+0

Với sự khác biệt (có thể không đáng kể) mà một phần 'có thể được gọi với các đối số khác được chuyển tiếp bổ sung. – glglgl

+0

không, dừng lại ... nó không giống nhau, tôi nghĩ rằng ... – glglgl

+0

Tôi đã viết lại đáng kể điều này, để sửa cho ban đầu tôi đã đọc sai câu hỏi. –

0

Nó có liên quan chặt chẽ với partial, nhưng không giống nhau.

partial có chức năng và một số đối số và trả về cuộc gọi có thể gọi được cho phép có thể gọi được với các thông số được kết hợp.

def pr(x): print (x) # making it fit for 2.x and 3.x 

p = functools.partial(pr, 1, 2, 3) 
p() # prints 1, 2, 3 

q = f(1, 2, 3) 
p(pr) # prints 1, 2, 3 
Các vấn đề liên quan