funktion ohne Klammer übergeben

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

Hallo miteinander
ich habe eine Frage zu Funktion in Python. Wenn ich normal in Python eine Funktion ausführe, dann ist die schreibeweise so func1().

aber in django kann man in der url.py funktion übergeben ohne klammer, wie ist das möglich, dass es nachher als funktion intepretiert wird?

Code: Alles auswählen

urlpatterns = patterns('',
    # ...
    (r'^test/$', testview),
    # ...
)
Danke kostonstyle
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

Die Funktion wird so nicht ausgeführt, sondern übergeben.

Code: Alles auswählen

>>> def hallo():
...   print "hallo"
...
>>> def tu_was(func):
...   func()
...
>>> tu_was(hallo)
hallo
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

meinst du properties?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Du kannst in Python Funktionen (und Klassen) an einen Namen binden, z.B.

Code: Alles auswählen

def foo():
    print "Funktion ausgeführt!"
Teste mal im Interpreter, was jetzt bei Eingabe von

Code: Alles auswählen

baz = foo
und von

Code: Alles auswählen

baz = foo()
passiert.
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

super, habe nie das so etwas möglich ist. vielen dank leute
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

kostonstyle hat geschrieben:super, habe nie das so etwas möglich ist.
Funktionen sind eben auch nur Werte und können genauso übergeben werden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Wobei ich das noch nicht ganz verstehe (iPython, 2.6.4):

Code: Alles auswählen

In [1]: def foo():
   ...:     print "Funktion ausgeführt!"

In [2]: baz = foo

In [3]: baz = foo()
Funktion ausgeführt!

In [4]: baz

In [5]: baz()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

U:\<ipython console> in <module>()

TypeError: 'NoneType' object is not callable
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

mkesper hat geschrieben:Wobei ich das noch nicht ganz verstehe (iPython, 2.6.4):
Ist nicht dein Ernst, oder? -> Zeile 6!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schau dir mal den Rückgabewert von ``foo()`` an, was ist der? Und was passiert wenn man den an ``baz`` bindet und versucht aufzurufen?

Ich glaub du hast einfach nen schlechten Tag. Passiert mir auch manchmal :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Leonidas hat geschrieben:Ich glaub du hast einfach nen schlechten Tag. Passiert mir auch manchmal :)
Tomato-Day. ;)
Antworten