Seite 1 von 1

Funktionen dynamisch aufrufen

Verfasst: Dienstag 3. Juli 2007, 00:08
von Volvic
hallo,

ich möchte gerne funktionen dynamisch aufrufen. im forum hab ich was passendes gefunden, allerdings funktioniert es nicht. welche methoden gibt es dafür, welche sind elegant?

Verfasst: Dienstag 3. Juli 2007, 00:19
von BlackJack
Was heisst dynamisch aufrufen? Python ist eine durch und durch dynamische Programmiersprache, da ist jeder Aufruf dynamisch.

Ich würde mal vermuten Du möchtest Funktionen in ein Dictionary stecken oder mit `getattr()` arbeiten, aber dazu müsstest Du schon ein wenig mehr darüber verraten, was Du wirklich machen möchtest.

Verfasst: Dienstag 3. Juli 2007, 14:12
von Volvic
genau, ich möchte strings sozusagen als funktion ausführen, eben z.b. mit nem dict oder ne liste oder sogar eine extra funktion?

Verfasst: Dienstag 3. Juli 2007, 14:27
von BlackJack
Das verrät immer noch nicht viel mehr. Was hast Du, was willst Du. Möglichst *genau*. Vielleicht mit Beispiel.

Verfasst: Dienstag 3. Juli 2007, 14:28
von Rebecca
BlackJack hat dir ja schon ein Stichwort geliefert, hier mal ein Beispiel mit getattr:

Code: Alles auswählen

>>> import math
>>> func = getattr(math, "cos")
>>> func(0)
1.0
>>> func = getattr(math, "sin")
>>> func(0)
0.0

Verfasst: Dienstag 3. Juli 2007, 14:53
von Volvic
hab den post gefunden: http://www.python-forum.de/topic-6093.html

das beispiel funktioniert bei mir (py 2.5.1) nicht...

Verfasst: Dienstag 3. Juli 2007, 15:27
von BlackJack
Das im ersten Beitrag funktioniert nicht, das war ja die Frage. Im zweiten Beitrag wird gezeigt, wie es funktioniert.

Falls das immer noch nicht geht, wäre es nett, wenn Du verraten würdest *was* nicht funktioniert. Fehlermeldungen sind dazu da, damit man nicht raten muss wo das Problem liegt. ;-)

Verfasst: Dienstag 3. Juli 2007, 17:24
von Volvic
nunja das ist mein problem, es kommt keine. habe jetzt meine anwendung neu designed, scheint jetzt zu funktionieren:

Code: Alles auswählen

from flup.server.fcgi import WSGIServer

# wsgi applications
def app_home():
	return 'du bist in app_home'

def app_account():
	return 'du bist in app_account'

# wsgi app list
WSGI_APPS = {'/home' : app_home,
	'/account' : app_account
}

# wsgi main code
def wsgi_main(environ, start_response):
	if environ['PATH_INFO'] in WSGI_APPS:
		wsgi_app = WSGI_APPS[environ['PATH_INFO']]()
		status = '200 OK'
		response_headers = [('Content-Type', 'text/html'), ('Connection', 'Keep-Alive')]
		start_response(status, response_headers)
		print environ['PATH_INFO']
		return [wsgi_app]
	else:
		status = '404 Not Found'
		response_headers = [('Content-Type', 'text/html'), ('Connection', 'Close')]
		start_response(status, response_headers)
		print environ['PATH_INFO']
		return ['ERROR: 404 - Not Found']

WSGIServer(wsgi_main, debug=True, bindAddress=('127.0.0.1', 9000)).run()
PS: ich hatte natürlich den code aus dem letzteren beitrag, also der als funktionierend angeben war.

Verfasst: Dienstag 3. Juli 2007, 20:25
von Y0Gi
Du willst WSGI nicht direkt, sondern über ein Framework verwenden *Jedi-Handbewegung mach* ;)