Aktueller Funktionsname

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.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Aktueller Funktionsname

Beitragvon theliquidwave » Freitag 19. September 2008, 13:08

Hi.
Wollte mal fragen, ob es möglich ist, via einer Variable o.Ä. rauszubekommen, wie die aktuelle Funktion heißt.

Pseudocode:

Code: Alles auswählen

def test():
    print __name__

test()

Dies gibt natürlich nur "__main__" aus.

Danke im Vorraus,
~ Chris
Grüßle.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 19. September 2008, 13:29

Code: Alles auswählen

import inspect

def test():
    print inspect.stack()[0][3]

test()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 19. September 2008, 13:33

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Beitragvon theliquidwave » Freitag 19. September 2008, 16:19

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
Grüßle.
DasIch
User
Beiträge: 2423
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Freitag 19. September 2008, 16:39

Wie wäre es mit nem Dekorator der die Funktion irgendwie registriert o.ä.?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 19. September 2008, 16:40

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".
My god, it's full of CARs! | Leonidasvoice vs Modvoice
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Beitragvon theliquidwave » Freitag 19. September 2008, 19:08

omg!!!
Stimmt, so einfach :shock:
Danke, klappt perfekt und ist sehr schnell :D

~ Chris
Grüßle.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Beitragvon name » Samstag 20. September 2008, 18:14

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__
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 20. September 2008, 22:54

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Beitragvon name » Sonntag 21. September 2008, 14:31

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.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder