2012-11-09 30 views
6

Trong Python, làm thế nào tôi có thể chuyển một toán tử như + hoặc < làm tham số cho một hàm mong đợi một hàm so sánh làm tham số?tham số python vận hành

def compare (a,b,f): 
    return f(a,b) 

Tôi đã đọc về các chức năng như __gt__() hoặc __lt__() nhưng tôi vẫn không thể sử dụng chúng.

Trả lời

11

operator module là những gì bạn đang tìm kiếm. Ở đó bạn tìm thấy các hàm tương ứng với các toán tử thông thường.

ví dụ:

operator.lt 
operator.le 
+0

Đó làm việc. Cảm ơn bạn. – Izabela

5

use operator module for this purposes

import operator 
def compare(a,b,func): 

    mappings = {'>': operator.lt, '>=': operator.le, 
       '==': operator.eq} # and etc. 
    return mappingsp[func](a,b) 

compare(3,4,'>') 
+2

Tại sao 'lambda'? Bạn không chỉ muốn '{'>': operator.lt, '> =': operator.le, ...}' – mgilson

+0

chỉ cần quên kiểm tra mà không +1 cho bình luận của bạn –

0

Sử dụng một điều kiện lambda như một tham số phương pháp:

>>> def yourMethod(expected_cond, param1, param2): 
...  if expected_cond(param1, param2): 
...    print 'expected_cond is true' 
...  else: 
...    print 'expected_cond is false' 
... 
>>> condition = lambda op1, op2: (op1 > op2) 
>>> 
>>> yourMethod(condition, 1, 2) 
expected_cond is false 
>>> yourMethod(condition, 3, 2) 
expected_cond is true 
>>> 
Các vấn đề liên quan