Seite 1 von 1
Aktueller Funktionsname
Verfasst: Freitag 19. September 2008, 13:08
von theliquidwave
Hi.
Wollte mal fragen, ob es möglich ist, via einer Variable o.Ä. rauszubekommen, wie die aktuelle Funktion heißt.
Pseudocode:
Dies gibt natürlich nur "__main__" aus.
Danke im Vorraus,
~ Chris
Verfasst: Freitag 19. September 2008, 13:29
von jens
Code: Alles auswählen
import inspect
def test():
print inspect.stack()[0][3]
test()
Verfasst: Freitag 19. September 2008, 13:33
von Leonidas
Code: Alles auswählen
import inspect
def foo():
print inspect.currentframe().f_code.co_name
Aber sowas braucht man so gut wie
nie, es ist also möglich, dass du da etwas unnötig kompliziert machst.
Verfasst: Freitag 19. September 2008, 16:19
von theliquidwave
Naja,
mein Vorhaben ist, für alle möglichen Events eines Spiels (CS:S) Funktionen zu machen. Nun soll der Benutzer einfach in ein Dict den Funktionsnamen hinzufügen dürfen, und eine Aufgabe.
Da es über 300 Events sind, wollte ich das ganze automatisieren.
~ Chris
Verfasst: Freitag 19. September 2008, 16:39
von DasIch
Wie wäre es mit nem Dekorator der die Funktion irgendwie registriert o.ä.?
Verfasst: Freitag 19. September 2008, 16:40
von Leonidas
Chrisber hat geschrieben:Naja,
mein Vorhaben ist, für alle möglichen Events eines Spiels (CS:S) Funktionen zu machen. Nun soll der Benutzer einfach in ein Dict den Funktionsnamen hinzufügen dürfen, und eine Aufgabe.
Da es über 300 Events sind, wollte ich das ganze automatisieren.
Und warum übergibt der User nicht die Funktion (d.h. eine Referenz auf die Funktion) selbst? Das ist doch ätzend mit Funktionsnamen, wo du dann herausfinden musst, wie man aus dem String denn nun wieder eine Funktion macht.
Das meinte ich mit "falsch machen".
Verfasst: Freitag 19. September 2008, 19:08
von theliquidwave
omg!!!
Stimmt, so einfach
Danke, klappt perfekt und ist sehr schnell
~ Chris
Verfasst: Samstag 20. September 2008, 18:14
von name
DasIch hat geschrieben:Wie wäre es mit nem Dekorator der die Funktion irgendwie registriert o.ä.?
Code: Alles auswählen
def inject_function(f):
f.func_globals["__function__"] = f
return f
@inject_function
def foo():
print __function__
if __name__ == '__main__':
foo()
So in der Art ginge das, was aber ziemlich sicher boese ist, also lieber nicht benutzen

Habs nur aus langeweile gemacht.
EDIT: Fuer den Namen dann natuerlich __function__.__name__
Verfasst: Samstag 20. September 2008, 22:54
von Leonidas
name, wie registriert das bitte? Ich schätze mal, das hast du auch gar nicht vorgehabt zu schreiben, nur mit dem Zitat kam das so rüber. Allerdings sehe ich um ehrlich zu sein, nicht den Sinn in dem Code. Variablen in Funktionen injezieren ist wohl hauptsächlich dann nützlich, wenn man plant sich in den Fuß zu schießen oder einen Wartungsalptraum zu schaffen.
Beim Registrieren würde man die Referenz auf die Funktion in eine Liste oder sonstigen Containerdatentyp packen und die Funktion unverändert zurückgeben.
Verfasst: Sonntag 21. September 2008, 14:31
von name
Leonidas hat geschrieben:name, wie registriert das bitte? Ich schätze mal, das hast du auch gar nicht vorgehabt zu schreiben, nur mit dem Zitat kam das so rüber. Allerdings sehe ich um ehrlich zu sein, nicht den Sinn in dem Code. Variablen in Funktionen injezieren ist wohl hauptsächlich dann nützlich, wenn man plant sich in den Fuß zu schießen oder einen Wartungsalptraum zu schaffen.
Beim Registrieren würde man die Referenz auf die Funktion in eine Liste oder sonstigen Containerdatentyp packen und die Funktion unverändert zurückgeben.
Ich dachte, vom ueberfliegen, er wollte den Namen der Funktion in der er gerade "ist".

War auch nicht ganz ernst gemeint, nein.