2010-07-15 41 views
5

Tôi muốn chuyển hàm Python sang một hàm khác với một số tham số của nó "được điền" trước thời hạn.Tạo hàm Python với các tham số một phần

Đây là đơn giản hóa những gì tôi đang làm:

def add(x, y): 
    return x + y 

def increment_factory(i): # create a function that increments by i 
    return (lambda y: add(i, y)) 

inc2 = increment_factory(2) 

print inc2(3) # prints 5 

Tôi không muốn sử dụng một số loại trôi qua args và sau đó nổ tung nó với *args vì chức năng tôi đi qua inc2 vào không biết để vượt qua args cho nó.

Điều này có vẻ hơi quá thông minh đối với một dự án nhóm ... có cách nào đơn giản hơn hay cách sâu sắc hơn để thực hiện việc này không?

Cảm ơn!

Trả lời

18

Điều này được gọi là currying hoặc một phần ứng dụng. Bạn có thể sử dụng được xây dựng trong functools.partial(). Một cái gì đó như sau sẽ làm những gì bạn muốn.

import functools 
def add(x,y): 
    return x + y 

inc2 = functools.partial(add, 2) 
print inc2(3) 
+0

Cảm ơn! Một trong những tính năng yêu thích của tôi về Haskell là công cụ cà ri được tích hợp sẵn. Tôi chỉ nên sử dụng thuật ngữ :). –

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