Pointers to variables

Dan Schmidt dfan at harmonixmusic.com
Thu Apr 22 13:30:53 EDT 1999


Randall Hopper <aa8vb at vislab.epa.gov> writes:

| This doesn't work:
| 
|     for ( var, str ) in [( self.min, 'min_units' ),
|                          ( self.max, 'max_units' )]:
|       if cnf.has_key( str ):
|         var = cnf[ str ]
|         del cnf[ str ]
| 
| It doesn't assign values to self.min, self.max (both integers).  The
| values of these variables are inserted into the tuples and not
| references to the variables themselves, which is the problem.
| 
| How can I cause a reference to the variables to be stored in the
| tuples instead of their values?

Here's how I would do it:

  for ( varname, str ) in [( 'min', 'min_units' ),
                           ( 'max', 'max_units' )]:
      if cnf.has_key( str ):
          setattr (self, varname, cnf[ str ])
          del cnf[ str ]

I don't think this is really any slower than what you wanted to do,
since Python was doing namespace lookups on 'min' and 'max' before
anyway.

If min and max were mutable objects, a variation of your approach
would probably work, if there were a method to change them in-place
(e.g., "var.set_me (cnf[str])").  "var = cnf[str]" is never going to
do what you want, since it just makes the name 'var' point to a
different object (that's what assignment means in Python).

I've just been using Python for a week, so take my answer with a grain
of salt...

-- 
                 Dan Schmidt -> dfan at harmonixmusic.com, dfan at alum.mit.edu
Honest Bob & the                http://www2.thecia.net/users/dfan/
Factory-to-Dealer Incentives -> http://www2.thecia.net/users/dfan/hbob/
          Gamelan Galak Tika -> http://web.mit.edu/galak-tika/www/




More information about the Python-list mailing list