2016-04-16 7 views
3

In Python, was den Unterschied zwischen ist:Python: Was ist der Unterschied - abs und operator.abs

abs(a) und operator.abs(a)

Sie sind die gleichen und sie gleichermaßen arbeiten. Wenn sie das gleiche sind, warum sind dann zwei separate Funktionen, die dasselbe machen?

Wenn es eine bestimmte Funktionalität für eines davon gibt - bitte erklären Sie es.

Antwort

7

Es gibt keinen Unterschied. Die Dokumentation sagt auch so:

>>> import operator 
>>> print(operator.abs.__doc__) 
abs(a) -- Same as abs(a). 

Es wird als Wrapper implementiert gerade so die Dokumentation aktualisiert werden kann:

from builtins import abs as _abs 

# ... 

def abs(a): 
    "Same as abs(a)." 
    return _abs(a) 

(Anmerkung, die über Python-Implementierung nur dann, wenn verwendet wird, die C module itself kann nicht geladen sein).

Es ist dort rein, um die anderen (mathematischen) Operatoren zu ergänzen; z.B. Wenn Sie dynamische Operator-Lookups auf diesem Modul durchführen möchten, müssen Sie nicht den Sonderfall abs().

4

Kein Unterschied. Sie könnten operator.abs mit Funktionen wie itertools.accumulate verwenden, genauso wie Sie operator.add für + verwenden. Es gibt jedoch eine Leistungsdifferenz.

Zum Beispiel operator.add verwendet, ist doppelt so schnell wie + (Beazly).

+3

Vergleichen von 'abs' mit' add' auf Leistung ist .. ein bisschen sinnlos. Beispielsweise gibt es keinen Leistungsunterschied zwischen 'operator.abs' und' abs' (abgesehen von der Attributsuche auf 'operator.abs', die bei der Bindung an einen lokalen Namen vermieden werden kann). –

+0

@MartijnPieters Einverstanden. Deshalb habe ich 'operator.add' als Beispiel verwendet. –

+0

@MartijnPieters Ich wollte nur sagen, dass die Dinge in der "Operator" -Modul nicht angesichts der Betreiber sinnlos sind. –