Hallo!
Ich hab die Suche bemüht aber leider konnte mir die (wie google auch) keine Antwort liefern.
Ich frage mich, welche Vorteile die operatoren aus dem Modul gegenüber den "normalen" haben.
Merkt man einen Geschwindigkeitsvorteil oder sind die einfach besserer Stil?
Danke schonmal!
add() usw. aus Modul operator schneller als z.B. a+b
@hulkhomer: Das ist weder eine Geschwindigkeits- noch eine Stilfrage sondern das man manchmal eine Funktion brauchen kann die den gleichen Effekt wie ein Operator hat. Und einige Funktionen machen/können auch etwas mehr als der entsprechende Operator.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@hulkhomer: Würdest du so programmieren wollen:?
Oder doch lieber so:Die Funktionen aus dem operator Modul kann man verwenden, wenn man zB. sowas macht:Ergebnis:foldl() gibt es auch in der Python Standardlib, nur dass es da reduce() heißt und einen zusätzlichen, optionalen start-Parameter nimmt:Ab Python 3 muss man es aus functools importieren.
Und noch das hier zum Vergleich:
Code: Alles auswählen
from operator import mul, add, sub, mod
a = mod(mul(b, c), add(mul(d, e), sub(mul(f, g), h)))
Oder doch lieber so:
Code: Alles auswählen
a = (b * c) % (d * e + f * g - h)
Code: Alles auswählen
def foldl(binary_function, iterable):
iterable = iter(iterable)
result = next(iterable)
for each in items:
result = binary_function(result, each)
return result
items = [1, 2, 3, 4, 5, 6, 7]
foldl(mul, items)
Code: Alles auswählen
5040
Code: Alles auswählen
>>> reduce(mul, items)
5040
>>> reduce(mul, items, 10)
50400
Und noch das hier zum Vergleich:
Code: Alles auswählen
>>> reduce(*, items)
File "<stdin>", line 1
reduce(*, items)
^
SyntaxError: invalid syntax
In specifications, Murphy's Law supersedes Ohm's.
Danke erstmal für die ausführliche Antwort!
Natürlich finde ich a+b auch praktischer, bei z.B. add() ist halt zum Beispiel die Möglichkeit praktisch, ein Tupel gleich zu addieren, ohne for in.
Ich bin ein ziemlicher Anfänger und will mir gleich zu Beginn einen (einigermaßen) sauberen Stil angewöhnen. Und weil mein Rechner eine ziemliche Krücke ist, bin ich immer froh, wenn ich Sachen schneller rechnen lassen kann
Natürlich finde ich a+b auch praktischer, bei z.B. add() ist halt zum Beispiel die Möglichkeit praktisch, ein Tupel gleich zu addieren, ohne for in.
Ich bin ein ziemlicher Anfänger und will mir gleich zu Beginn einen (einigermaßen) sauberen Stil angewöhnen. Und weil mein Rechner eine ziemliche Krücke ist, bin ich immer froh, wenn ich Sachen schneller rechnen lassen kann
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Das macht man mit sum():hulkhomer hat geschrieben:... ein Tupel gleich zu addieren, ohne for in.
Code: Alles auswählen
>>> tup = 2, 4, 6
>>> tup
(2, 4, 6)
>>> sum(tup)
12
In specifications, Murphy's Law supersedes Ohm's.
Wenn du wissen willst wie schnell etwas ist, dann hilft nur Messen. Selbst dann ist aber nicht gesagt, dass die schnellere Methode in wirklichen allen Python-Laufzeitumgebungen grundsätzlich schneller ist.hulkhomer hat geschrieben:Und weil mein Rechner eine ziemliche Krücke ist, bin ich immer froh, wenn ich Sachen schneller rechnen lassen kann
So lange du nicht wirklich ernsthafte Performance-Probleme hast solltest du Code nicht auf vermeintlichen Geschwindigkeitsgewinn hin optimieren.
@hulkhomer: Als Zusatz zu /me's Beitrag: Wenn optimieren dann nicht mit solchen Kleinigkeiten sondern eher Algorithmisch schauen ob man das nicht besser hinbekommt. Falls nicht, dann die zeitkritischen Teile in C programmieren und mit `ctypes` einbinden oder Cython verwenden.