Seite 1 von 1

log_2(x) mit functools.partial definieren

Verfasst: Mittwoch 17. März 2010, 15:30
von Goswin
Es wird peinlich :evil:, aber ich habe gerade 1_Stunde lang versucht, mit functools.partial einen Logarithmus in Basis 2 zu definieren. Natürlich funktioniert auch

Code: Alles auswählen

log_2 = lambda x: log(x)/log(2)
oder

Code: Alles auswählen

log_2 = lambda x: log(x,2)
aber das folgende eben nicht:

Code: Alles auswählen

log_2 = partial(log,2) #falsch
log_2 = partial(log,(2,)) #falsch
Die help-funktion hilft da auch nicht weiter, und die Bücher von O'Reilly und von Summerfield bringen nur Beispiele mit keyword-Argumenten. Kann mir jemand sagen, was ich falsch mache?

Verfasst: Mittwoch 17. März 2010, 15:46
von cofi
Dein `partial`-Ansatz ist falsch, da du das erste Argument bindest, nicht `base`, also das 2.

Allerdings scheint auch

Code: Alles auswählen

log_2 = partial(log, base=2)
nicht zu funktionieren, da `log` kein Keyword-Argument akzeptiert ... bleibt nur `lambda`.

Verfasst: Mittwoch 17. März 2010, 15:47
von DasIch
functools.partial funktioniert nur bei Python Funktionen einwandfrei.

Verfasst: Mittwoch 17. März 2010, 15:51
von BlackJack
@DasIch: Das stimmt so nicht. Wenn `math.log()` auch Schlüsselwortargumente nehmen würde, dann könnte man `partial()` verwenden.

Verfasst: Mittwoch 17. März 2010, 16:12
von Goswin
DasIch hat geschrieben:functools.partial funktioniert nur bei Python Funktionen einwandfrei.
Sind hier built-in-Funktionen gemeint, also Funktionen die man nicht importieren muss? Ich dachte nämlich, math.log _sei_ bereits eine Python-Funktion...


:mrgreen: :mrgreen: :mrgreen: Und folgendes funktioniert natürlich auch :mrgreen: :mrgreen: :mrgreen: :

Code: Alles auswählen

log_2 = lambda x: partial(log,x,2)()
So oder so, vielen Dank für eure Info!

Verfasst: Mittwoch 17. März 2010, 16:39
von BlackJack
@Goswin: DasIch meinte Funktionen die in C implementiert sind und nicht in Python. Fast alles -- wenn nicht sogar alles -- aus dem `math`-Modul ist ja nur eine dünne Schicht über die Mathe-Funktionen aus der C-Standardbibliothek.