log_2(x) mit functools.partial definieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Goswin
User
Beiträge: 363
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen
Kontaktdaten:

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?
Python nervt. (Nicht immer, und natürlich nur mich, niemals andere)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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`.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

functools.partial funktioniert nur bei Python Funktionen einwandfrei.
BlackJack

@DasIch: Das stimmt so nicht. Wenn `math.log()` auch Schlüsselwortargumente nehmen würde, dann könnte man `partial()` verwenden.
Benutzeravatar
Goswin
User
Beiträge: 363
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen
Kontaktdaten:

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!
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.
Antworten