2012-11-09 12 views
6

Wie kann ich in Python einen Operator wie + oder < als Parameter an eine Funktion übergeben, die eine Vergleichsfunktion als Parameter erwartet?Operator Python Parameter

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

Ich habe über Funktionen wie __gt__() oder __lt__() lesen, aber noch war ich nicht in der Lage, sie zu nutzen.

Antwort

11

The operator module ist, was Sie suchen. Dort finden Sie Funktionen, die den üblichen Operatoren entsprechen.

z.B.

operator.lt 
operator.le 
+0

die gearbeitet. Vielen Dank. – 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

Warum das 'Lambda'? Willst du nicht einfach '{'>': operator.lt, '> =': operator.le, ...}' – mgilson

+0

einfach vergessen, ohne +1 für Ihren Kommentar zu überprüfen –

0

Verwenden einer Lambda-Bedingung als Methodenparameter:

>>> 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 
>>>