Mit Funktionen in Python dividieren funktioniert falsch?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dein Programm würde so, wie du es dir vorstellst, nur funktionieren, indem du die Reihenfolge der Argumente für floordiv umtauschst (aktuell werden die Argumente nur nach Ausführungsreihenfolge angehängt: Erst die 3, dann die 7).

Da es sich hierbei allerdings um eine C-Funktion handelt, sind keyword-Argumente nicht möglich.

Du könntest dir stattdessen eine eigene Funktion für die Division schreiben:

def floor_division(a, b):
  return floordiv(a, b)

Die kannst du dann in divided benutzen:

def divided(val):
  return partial(floor_division, b=val)
Leonardo06 
Fragesteller
 03.08.2021, 15:55

Dankeschön!

0
   return partial(floordiv, val)

gibt eine Funktion f(x) zurück, die val/x berechnet.

Wenn Du stattdessen x/val möchtest, versuche es mit

   return lambda x: x//val

So wie ich das verstehe, passiert im ersten Fall folgendes:

(Von innen nach außen)

three() liefert eine 3.

divided(3) liefert eine Funktion, die floordiv mit dem Argument 3 aufrufen will.

In seven(divided(...)) wird diese Funtion dann gerufen (sie heißt dort op(7)). Die 7 ist ein extra Argument, das an die als Argument schon vorhandene 3 angehängt wird. Es wird also effektiv floordiv(3,7) aufgerufen.

Im zweite Fall wird das floordiv(7,3).

Leonardo06 
Fragesteller
 03.08.2021, 15:49

Wie kann ich das dann ändern?

0
tunik123  03.08.2021, 15:58
@Leonardo06

Der Trick von regex9 sollte helfen. Man kann dort auch ganz frech die Argumente von floordiv vertauschen.

1