[Python-de] Parameterübergabe bei lamda

Christian Tismer tismer at appliedbiometrics.com
Mon May 31 19:26:00 EDT 1999


> Michael Neumann wrote:
> 
> Hi...
> 
> Wenn ich innerhalb einer Funktion eine Variable setze, und auf diese
> dann in einer anonymen Funktion (lambda-Funktion) zugreifen will, die
> auch in derselben Funktion definiert ist wie die Variable, gibt es da
> noch einen anderen Weg als, daß ich die Variable als Parameter der
> lambda-Funktion übergebe? Kann man nicht die Variable in dieser
> Funktion global machen für alles, was innerhalb der Funktion definiert
> ist?

Nein.
Eine Funktion kennt genau zwei (äh drei) Namespaces.
Ihre locals, ihre globals und die builtins, in dieser
Reihenfolge.
Die Deklaration einer Funktion innerhalb einer anderen
(sei es mit def oder lambda, *absolut* identisch) führt
lediglich dazu, daß die innere Funktion eine lokale Variable
innderhalb der umfassenden darstellt:

def outer():
    def inner():
        return 42
    print inner()

outer hat eine lokale Variable inner. inner hat genau die globals,
welche bei seiner Definition gültig waren, sowie seine eigenen
locals.

Kurz, Python kennt keine sogenannten "nested" Namespaces, weder
lexikalisch noch dynamisch. Man kommt um die Übergabe nicht
herum. Dazu kommt, daß die locals im Kontext der laufenden
Funktion kein Dictionary sind, und daher nicht "ordentlich"
(d.h. änderbar) übergeben werden können.

ciao - chris

-- 
Christian Tismer             :^)   <mailto:tismer at appliedbiometrics.com>
Applied Biometrics GmbH      :     Have a break! Take a ride on Python's
Kaiserin-Augusta-Allee 101   :    *Starship* http://starship.python.net
10553 Berlin                 :     PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint       E182 71C7 1A9D 66E9 9D15  D3CC D4D7 93E2 1FAE F6DF
     we're tired of banana software - shipped green, ripens at home




More information about the Python-de mailing list