On Mon, 2006-07-31 at 15:21 -0400, Michael Yanowitz wrote:
>   Is it possible to have a static variable in Python - 
> a local variable in a function that retains its value.
> 
>  For example, suppose I have:
> 
> def set_bit (bit_index, bit_value):
>    static bits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>    bits [bit_index] = bit_value
> 
>    print "\tBit Array:"
>    int i
>    while (i < len(bits):
>       print bits[i],
>    print '\n'
 

Many people suggest that using a class for this is the Python idiom (and
perhaps it is), but I prefer to use a decorator for adding attributes to
functions in this case:

def attrs ( **kwds ):
    ''' taken from PEP 318 '''
    def decorate ( f ):
        for k in kwds:
            setattr ( f, k, kwds [ k ] )
        return f
    return decorate

@attrs ( bits = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] )
def set_bit ( idx, val ):
    set_bit.bits [ idx ] = int ( bool ( val ) )
    print "Bit Array:"
    for i in set_bit.bits:
        print i,
    print 


>>> set_bit ( 4, 1 )
Bit Array:
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
>>> set_bit ( 5, 1 )
Bit Array:
0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0


Regards,
Cliff

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to