Funktionsname in Variable speichern und wieder aufrufen

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.
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

Würdest Du mich bitte kurz über den Unterschied zwischen Funktionsname und Funktionsobjekt erläutern ?
Ich ahne da was.
cofi hat geschrieben:Und warum willst du schon wieder den Funktionsamen statt dem Funktionsobjekt speichern?

Das ist im uebrigen das, was sowohl sma, als auch yipyip gezeigt haben.
:?:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mikehydro hat geschrieben:Würdest Du mich bitte kurz über den Unterschied zwischen Funktionsname und Funktionsobjekt erläutern ?
Ich ahne da was.
Ein Name ist an ein Modul gebunden, das Objekt nicht - wäre jetzt mal meine Schnell-Erklärung :-)
cofi hat geschrieben:Und warum willst du schon wieder den Funktionsamen statt dem Funktionsobjekt speichern?

Das ist im uebrigen das, was sowohl sma, als auch yipyip gezeigt haben.
:?:
cofi wollte Dir nur deutlich machen, dass für Dein Vorhaben der Name der Funktion vollkommen egal ist, sondern für Dich das Mapping Zeit -> Funktions-Objekt vollkommen ausreicht.

Code: Alles auswählen

def foo():
    pass

def bar():
    pass

mapping = {
1000: foo,
1001: bar,
1004: bar
...
}
Der Key ist hier eben der Zeitpunkt, als value nimmst Du das Objekt.
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

Mapping ist jetzt eine ganz neue Kiste für mich.
Es wird nicht klarer ...

Die Liste mit den Zeitpunkten und Funktionsnamen (oder Funktionsobjekten) wird permanent erweitert, aktualisiert und natürlich zum richtigen Zeitpunkt auch abgearbeitet und der Eintrag entfernt.

Code: Alles auswählen

def foo():
    pass

def bar():
    pass

mapping = {
1000: foo,
1001: bar,
1004: bar
...
}
Der Key ist hier eben der Zeitpunkt, als value nimmst Du das Objekt.[/quote]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann solltest du spaetestens jetzt das Tutorial lesen.
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

cofi hat geschrieben:Dann solltest du spaetestens jetzt das Tutorial lesen.
Sorry.

Das habe ich ausreichend und intensiv getan!
Und das bei allen Tutorials die sich finden lassen.

Ich habe eine konkrete Frage.
Es bringt mir gar nichts, wenn ich hier Vorschläge bekomme, die nicht meine Frage beantworten, sondern mir eine komplett andere Vorgehensweise nahe legen wollen. Und wenn ich diese Thematik dann nicht kenne, bedeutet dies nicht das ich nun endlich mal das Tutorial lesen sollte.

ES STEHT NICHT DRIN.

Und wer das nicht glaubt sollte meine Frage (ganz weit oben) genau lesen und mir zeigen wo ich das aus einen Tutorial raushole.

Ich habe das halbe Wochenende Tutorals gelesen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

... und Dir noch mal sma's 2. Posting angucken! Ich vermute mal Du hast das nicht wirklich kapiert!

Das Mapping an sich ist hier ja fast nebensächlich. Wichtig ist doch nur, dass Du eine Funktion an einen beliebigen Namen binden kannst. Irgend wann kannst Du die dann über diesen Namen aufrufen.

Code: Alles auswählen

def foo(name):
    return u"call from {0}".format(name)

a = foo
b = foo
a("a")
b("b")
foo("foo")
Bei einem Dict bindest Du die Funktion eben an einen bestimmten Key. Letztlich ganz änlich. (s. mein Snippet)

Für eine sich öfter aktualisierende List wäre dann wohl eine Queue die geeignete Datenstrukur (z.B. in collections.deque).
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

queue ≠ deque
http://docs.python.org/library/collections#deque-objects hat geschrieben:Deques are a generalization of stacks and queues (the name is pronounced “deck” and is short for “double-ended queue”).
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

derdon hat geschrieben:queue ≠ deque
http://docs.python.org/library/collections#deque-objects hat geschrieben:Deques are a generalization of stacks and queues (the name is pronounced “deck” and is short for “double-ended queue”).
Richtig ...

und in meiner Antwort habe ich freundlich um eine Erklärung gebeten, da ich das so nicht verstehe / verstanden habe.

Und bis jetzt keine Antwort erhalten !


Kommt im Moment alles so ein bisschen von oben herab.


Trotzdem danke an alle die sich hier bemüht haben.

Ich werde nun dem Hinweis folgen, jetzt endlich mal Tutorial zu lesen.

Oder in C proggen. Da geht's.


Danke.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mikehydro hat geschrieben:
cofi hat geschrieben:Dann solltest du spaetestens jetzt das Tutorial lesen.
Sorry.

Das habe ich ausreichend und intensiv getan!
Und das bei allen Tutorials die sich finden lassen.
Über Dictionaries steht def. etwas im offiziellen Tutorial.

Und im 6. Absatz unter 4.6 seht folgendes:
Tutorial hat geschrieben: A function definition introduces the function name in the current symbol table. The value of the function name has a type that is recognized by the interpreter as a user-defined function. This value can be assigned to another name which can then also be used as a function. This serves as a general renaming mechanism:

Code: Alles auswählen

>>> fib
<function fib at 10042ed0>
>>> f = fib
>>> f(100)
1 1 2 3 5 8 13 21 34 55 89
Ich habe eine konkrete Frage.
Es bringt mir gar nichts, wenn ich hier Vorschläge bekomme, die nicht meine Frage beantworten, sondern mir eine komplett andere Vorgehensweise nahe legen wollen. Und wenn ich diese Thematik dann nicht kenne, bedeutet dies nicht das ich nun endlich mal das Tutorial lesen sollte.
Das Problem liegt bei Dir! Du suchst von uns eine Teillösung für ein Problem, welches Du uns später auch ein wenig erläutert hast. Leider ist Deine Lösunsgidee eben schlecht - zumindest konntest Du uns nicht erklären, wieso Du es unbedingt so haben willst.

Auf der anderen Seite wurden Dir Vorschläge unterbreitet, wie man Dein Problem sehr elegant und einfach lösen kann. Das lehnst Du ab, weil Du nicht das Interesse hast, Dich mit den beötigten Mechanismen auseinander zu setzen.

Deine Idee kannst Du aber (auch) nicht umsetzen, zudem benötigst Du anscheinend dafür auch Dictionaries.

Wo also genau liegt jetzt Dein Problem?
ES STEHT NICHT DRIN.
Doch, s.o. ;-)
Und wer das nicht glaubt sollte meine Frage (ganz weit oben) genau lesen und mir zeigen wo ich das aus einen Tutorial raushole.
Das steht da vermutlich nicht drin - ist ja auch wohl eine komplizierte und fehleranfällige und un-pythonische "Lösung".

Willst Du eigentlich ein Problem lösen oder Dir Probleme schaffen? So langsam blicke ich es nicht mehr...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

derdon hat geschrieben:queue ≠ deque
Richtig.
http://docs.python.org/library/collections#deque-objects hat geschrieben:Deques are a generalization of stacks and queues (the name is pronounced “deck” and is short for “double-ended queue”).
Somit umfasst ein deque die Funktionalität einer queue ;-) Was anderes habe ich ja quasi nie behauptet :-D
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

Hyperion !

Kennst Du Dich mit der Programmierung von SPS-Steuerungen und der Programmierung von Produktionsmaschinen aus ??

Dann tu nicht so, sonder helf. Ich hab freunlich drum gefragt.

Wenn Du dich nicht damit auskennst, hast Du mir nur Probleme gemacht, weil Du glaubst etwas aufzwingen zu wollen, wo DU KEINE AHNUNG VON HAST.
Zuletzt geändert von mikehydro am Sonntag 18. Oktober 2009, 18:56, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mikehydro hat geschrieben:Hyperion !

Kennst Du Dich mit der Programmierung von SPS-Steuerungen und der Programmierung von Produktionsmaschinen aus ??
Nicht wirklich. Habe mal als Schüler ein wenig darüber gelesen...
Dann tu nicht so, sonder helf. Ich hab freunlich drum gefragt.
Ich wüßte nicht, wo ich etwas zu SPS o.ä. geschrieben hätte! Wieso "tue" ich also so? :shock:
Wenn Du dich nicht damit auskennst, hast Du mir nur Probleme gemacht, weil Du glaubst etwas aufzwingen zu wollen, wo DU KEINE AHNUNG VON HAST.
Ich habe Dir also Probleme gemacht, weil ich so freundlich war...
... in einem Forum auf Deine Fragen zu antworten
... mir die Mühe gemacht habe, Dir Code-Schnipsel als Erläuterung zu geben
... aus der Doku wichtige Passagen kopiert oder darauf verwiesen habe
... mich - zusammenfassend - mit Deiner Frage befasse!

So, jetzt habe ich es kapiert und alle anderen hier wohl auch :twisted:

Mal im Ernst: Schreibe doch noch einmal genau auf, was Du erreichen / lösen möchtest. Dann schreibe mal, was genau Du an der vorgeschlagenen Lösung (z.B. mit Hilfe von Mappings) nicht kapierst. Evtl. gib einfach mal ein paar Code-Schnipsel an, welche vielleicht zeigen, was Du bereits implementiert hast. Dann kann man noch mal zusammenfassend sagen, was da eine sinnvolle Vorgehensweise ist.
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

Meine Frage ist, präzise formuliert.

Kannst ja mal genau! lesen.

Den Code kann ich Dir gerne posten, Du würdest es nicht verstehen, weil Du so überzeugt von Dir bist und gar nicht richtig liest.

Und von SPS brauche ich vorher nichts zu sagen.
Ich habe ein Teilproblem geschildert und eine Frage gestellt.


Trotzdem danke für Deine Antworten.

In den C-Foren klappt das besser. Ohne Überheblichkeit.

Danke.


Das haben jetzt auch alle kapiert. Oder ?
Zuletzt geändert von mikehydro am Sonntag 18. Oktober 2009, 19:44, insgesamt 2-mal geändert.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

mikehydro hat geschrieben:Kennst Du Dich mit der Programmierung von SPS-Steuerungen und der Programmierung von Produktionsmaschinen aus ??
Also ich kenn mich damit aus und sehe keinen Zusammenhang zwischen deiner Fragestellung und SPS-Programmierung :!:
Finde es echt unverschämt, wie du dich hier aufführst...
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

Und am Schluss müssen auch die noch schnell was dazu sagen, die bisher nichts dazu zu sagen wussten.


ice2k3 hat geschrieben:
mikehydro hat geschrieben:Kennst Du Dich mit der Programmierung von SPS-Steuerungen und der Programmierung von Produktionsmaschinen aus ??
Also ich kenn mich damit aus und sehe keinen Zusammenhang zwischen deiner Fragestellung und SPS-Programmierung :!:
Finde es echt unverschämt, wie du dich hier aufführst...
Zuletzt geändert von mikehydro am Sonntag 18. Oktober 2009, 19:07, insgesamt 1-mal geändert.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Ja, weil deine Problemstellung eigentlich schon lange gelöst ist und du entweder zu ignorant oder zu unfähig bist um das zu realisieren...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mikehydro hat geschrieben:Meine Frage ist, präzise formuliert.

Kann ja mal genau! lesen.
Es fehlt z.B. schon einmal das Fragezeichen... so viel zur Präzision ;-)

sma hat Dir daraufhin doch auch eine Lösung gepostet! Wo ist denn dann jetzt noch das Problem? Imho deutet Deine Antwort auf sma darauf hin, dass Du das Konzept von Dictionaries noch nicht verstanden hast.

Wie sich dann jedoch herausstellte willst Du Dir gar nicht den Namen merken, sondern das Objekt! (Auch wenn Du das nicht einsehen willst und es vielleicht in seiner Gänze nicht verstehst. Letzteres ist aber imho nicht einmal mehr nötig, wenn man einfach mal meine Snipptes in einer Shell ausprobiert hätte)
Den Code kann ich Dir gerne posten, Du würdest es nicht verstehen, weil Du so überzeugt von Dir bist und gar nicht richtig liest.
Wieso lese ich nicht richtig? Im evolutionären Fluss dieser Diskussion habe ich sehr genau gelesen und entsprechend die Lösung weiter voran getrieben!
Und von SPS brauche ich vorher nichts zu sagen.
Ich habe ein Teilproblem geschildert und eine Frage gestellt.
Aber mir dann unterstellt, dass ich mich damit ja nicht auskennen würde, es mir aber dennoch anmaßen würde...

Mal abgesehen von Deiner asozialen Art: Wir haben doch zwei unterschiedliche Ansätze zur Lösun gezeigt. Wobei der letzte wesentlich direkter ist, als der erste. Und das Problem hast Du auch erst im Verlauf des Threads geschildert - weswegen wir dann ja erst kapiert haben, was Du eigentlich vor hast und dass ein Mapping die optimale Lösung ist.
In den C-Foren klappt das besser. Ohne Überheblichkeit.
Der einzige, der sich hier überheblich zeigt, bist Du!
Das haben jetzt auch alle kapiert. Oder ?
Naja, es haben wohl alle kapiert, dass es keinen Sinn hat, hier mehr etwas zu antworten oder Dir sonst wie zu helfen. Du gehst ja seit zig Antworten konsequent nicht auf meine Nach-Fragen oder Snipptes ein. Zudem schlägst Du einen aggressiven und fast schon beleidigenden Ton an und verkehrst in einer dreisten Art und Weise dazu noch diese Tatsache ins Gegenteil, indem Du anderen dieses unterstellst.

Ich denke das haben jetzt alle kapiert ;-)

Viel Spaß im C-Forum für Sozial-Legasteniker... auch wenn mich ein Link zu selbign schon mal interessieren würde :-D
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

mikehydro hat geschrieben:Meine Frage ist, präzise formuliert.

Kann ja mal genau! lesen.

Den Code kann ich Dir gerne posten, Du würdest es nicht verstehen, weil Du so überzeugt von Dir bist und gar nicht richtig liest.
Du bist es, der nicht richtig liest. Alles, was dir bisher geantwortet wurde, ist geeignet, dein Problem zu lösen, insbesondere alles, in dem das Wort "dict" vorkommt. Python dicts ("Mappings") sind ein elementares Werkzeug der Python-Programmierung, und wenn du das nicht mal ansatzweise lernen willst, solltest du wirklich lieber C programmieren. Im übrigen konnte ich nicht feststellen, dass hier jemand "von oben herab" geschrieben hätte. Es wurde nur der allgemeinen Ratlosigkiet Ausdruck verliehen, die deine Gegenantworten ausgelöst haben.
Und von SPS brauche ich vorher nichts zu sagen.
Ich habe ein Teilproblem geschildert und eine Frage gestellt.
Was du nicht zu verstehen scheinst, ist, dass dein Lösungsweg vielleicht der falsche ist, oder es zumindest in Python kürzere, einfachere und elegantere Wege gibt, das zu erreichen, was du erreichen willst (wie wärs hiermit?). Dein Teilproblem wäre dann nämlich dadurch gelöst, dass es verschwindet. Python != C, und eine Lösung, die in C gut ist, braucht deswegen nicht auch in Python gut sein. Bei der Python-Programmierung stellen sich einfach ganz andere Fragen bzgl des Designs, aber wenn du dich lieber mit null-terminierten Strings, eigenem Memory-Managment und verwaisten Pointern herumschlagen willst, bitte schön.
In den C-Foren klappt das besser. Ohne Überheblichkeit.

Danke.


Das haben jetzt auch alle kapiert. Oder ?
Allerdings. EOD.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Dies hier könnte auch bei der Genesung helfen.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

pillmuncher hat geschrieben:Python != C, und eine Lösung, die in C gut ist, braucht deswegen nicht auch in Python gut sein.
Wobei man sich doch auch in C einen Zeiger auf die Funktion merken würde, oder nicht? Speziell bei diesem Problem sehe ich da sogar durchaus Ähnlichkeiten zu C.
Antworten