Python uuid vs JavaScript uuid.js

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Pythoniare
User
Beiträge: 2
Registriert: Mittwoch 2. Dezember 2020, 08:47

Hi where,

ich versuche gerade eine recht complexe JavaScrip class nach Python zu transcoden und bleibe immer wieder an einer callback Funktion hängen.
(Wie man in Python callback grundsätzlich realisieren kann weiß ich - direkt, über eine list/dict oder via lambda.)

Der Aufruf des JavaScript callbacks taucht mehrfach auf und sieht in etwa so aus:

Variante 1:

Code: Alles auswählen

globalTimer.subscribe(this, Funktion1 { ......whatever to code .....})
Hier wird scheinbar einfach eine Funktion als Parameter mitgegeben. Doch was macht hier "this"? Ist das Python equivalent "self" und referenziert auf Timer?

Variante 2:

Code: Alles auswählen

globalTimer.subscribe(this, Funktion2(values))
Das scheint auch noch simple. Eine Funktion wird mit values übergeben.

Variante 3:

Code: Alles auswählen

globalTimer.subscribe(this, function (params){
   log = params.log
    x = params.x })
Das ist mir vollkommen unverständlich. Wenn "function(params){}" als callback an subcribe übergeben wird, wie kann dann in "function(params){}" "params" selbst ausgewertet werden.


Die korrespondierende Javascript Funktion "globalTimer.subscribe()" sieht etwa so aus:

Code: Alles auswählen

subscribe(service, callback) {

          NewDict= { 'service' :service, 'callback': callback, 'a': a, 'b': b }

:roll: :roll:

Wäre cool, wenn jemand einen Tip für mich hat.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Naja, dieses subscribe braucht zwei Argumente, einen service und einen callback.
Was in Deinem Fall this ist, verrätst Du ja nicht, scheint aber der service zu sein.
callback erwartet ein Argument, nämlich params.
Funktion2(values) ist einfach ein Funktionsaufruf, der wohl als Rückgabewert den Callback hat.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es würde deutlich helfen, wenn du etwas, das du nicht verstehst, nicht paraphrasierst, sondern exakt wiedergibst. Denn so schmeißt du genau die Teile weg, die für uns zur Beurteilung wichtig sind.

Deine Beispiele 1 & 2 sind dadurch nicht beurteilbar. Nachtrag: ich muss mich korrigieren: geht doch. Beispiel 1 ist wie Beispiel 3, siehe unten. Aber JS erzwingt keine Argumente, in Python wäre das also eine Funktion mit *args oder **kwargs

Beispiel 2 hat Sirius3 erläutert.

Trotzdem wäre der echte Code bzw. Namen besser.

Hier Erklärung zu 3:

Beispiel 3 ist äquivalent zu dem, was du selbst als verstanden angibst: ein lambda anzugeben. In Python kann so ein callback angeben werden:

Code: Alles auswählen

register_callback(lambda foo: foo * 2)
Warum ist das klar, wo doch foo selbst ausgewertet wird, aber in JS ist das exakt gleich vorgehen unklar?

Und zu guter letzt: this ist in JS ein bisschen speziell. Es wird sonst implizit zb auf das Element,mit dem der User interagiert hat gesetzt. Darum gibt es die Möglichkeit das explizit anzugeben.
Antworten