[Python-de] funktionen und statische variablen

Rainer Fischbach fischbach at ecs-gmbh.de
Tue Sep 17 12:40:56 EDT 2002


At 08:40 17.09.2002 +0200, you wrote:
> 
>danke! das hilft erstmal weiter :-)
>aber so muss ich ja, bevor ich die funktion aufrufe, immer erst die
>variable (hier g.x) von außerhalb initialisieren. sowas wie bei java
>oder auch php, wo ich innerhalb einer funktion eine statische variable
>vereinbaren und intial belegen kann ,gibts wohl bei python nicht?
>

ein Workarond besteht in einem veränderlichen Objekt als default-Parameter:


def f (stat = {'c': 0}):
    stat['c'] += 1
    return stat['c']


>>> f ()
1
>>> f ()
2
>>> f ()
3

aber das ist etwas tricky und nicht sehr sauber. Schöner und aufwendiger
wäre dies:

class sv:
    def __init__ (self, **stats):
        map (lambda (a, v): setattr (self, a, v), stats.items ())
    def bf (cls, **kargs):
        return cls (**kargs).f
    bf = classmethod (bf)
    def f (self): pass
    

class svf (sv):
    def f (self, x):
        self.c += 1
        return self.c * x

f = svf.bf (c = 0)

>>> f (1)
1
>>> f (1)
2
>>> f (1)
3

genereller Vorbehalt: statische Variablen führen zu intransparenten
Ausdrücken. f ist keine Funktion ihres Arguments mehr, da f(1) je nach
Kontext etwas anderes bedeutet!

sl, Rainer
 




     
    Rainer Fischbach
______________________________________________________

    ECS
    Engineering Consulting & Solutions GmbH
    Muehlstrasse 3
    D-92318  Neumarkt

    Phone:               +49 (0)9181 - 4764-84
    Fax:                 +49 (0)9181 - 4764-50
    Mobile:              +49 (0)171  - 41 41 570
    e-mail:              fischbach at ecs-gmbh.de
    WWW:                 http://www.ecs-gmbh.de
______________________________________________________






More information about the Python-de mailing list