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.
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.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Hyperion hat geschrieben:
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.
Schon. Und die Ähnlichkeiten gehen weiter, da man ja auch in C ein Mapping funcname --> function bräuchte. Dem OP Viel Spaß beim selber bauen.

Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

bords0 hat geschrieben:@yipyip: Wenn du f neu bindest, wird das nicht in bag sichtbar, d.h. bag.f ist noch die alte Funktion f.
Ich hatte es so verstanden, dass beim Aufruf die jeweils gerade daran gebundene Funktion verwenden werden soll. Deshalb hatte ich "eval" vorgeschlagen, weil ein dict o.ä. nicht ausreicht. Wenn er die Namen unter Kontrolle hat, ist das auch nicht gefährlich.

Kann aber gut sein, dass der OP eigentlich was ganz anderes will.

Zum Abschluß nochmal danke an bords0.

Diese Antwort hat mich am besten weitergebracht.
Das was Du hier schreibst funktioniert prima.


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

Und was genau ist daran

Code: Alles auswählen

def tolle_funktion(s):
    print "Hipp, Hipp,", s

func_name = tolle_funktion.func_name

# Aufruf dann...

eval(func_name)("Hurra!")
besser / leichter verständlich als

Code: Alles auswählen

def tolle_funktion(s):
    print "Hipp, Hipp", s

func = tolle_funktion
func("Hurra!")
?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Hyperion hat geschrieben:Und was genau ist daran

Code: Alles auswählen

def tolle_funktion(s):
    print "Hipp, Hipp,", s

func_name = tolle_funktion.func_name

# Aufruf dann...

eval(func_name)("Hurra!")
besser / leichter verständlich als

Code: Alles auswählen

def tolle_funktion(s):
    print "Hipp, Hipp", s

func = tolle_funktion
func("Hurra!")
?
Ist doch klar: das erste entspricht der spec, das zweite nicht. (spec == "ich will aber meine strings haben!! ichwillichwillichwill!!!!)
In specifications, Murphy's Law supersedes Ohm's.
mikehydro
User
Beiträge: 20
Registriert: Mittwoch 11. Juni 2008, 19:10
Wohnort: Wachtberg bei Bonn

Danke Hyperion.

Nun hast Du zum Abschluß noch eine schöne Schlammschlacht geliefert.
Hat hoffentlich gut getan.

Ich bin jedenfalls nicht persönlich verbal beleidigend geworden.
Wo lernt man so was?

Nun weiß hier jeder über Dich Bescheid.
Du hast ein tolles Niveau.

Wir sind stolz auf Dich.
Antworten