function that modifies a string

Jason tenax.raccoon at gmail.com
Mon Jul 10 11:44:37 EDT 2006


Simon Forman wrote:
> greenflame wrote:
> > Jason wrote:
> > >
> > > There /are/ a few hacks which will do what you want.  However, if you
> > > really need it, then you probably need to rethink your program design.
> > > Remember, you can't change a string since a string is immutable!  You
> > > can change a variable to bind to another string.  In the following
> > > example, s gets rebound to the new string while t keeps the original
> > > string value:
> > >
> > > >>> def changeString(varName):
> > > ...     globalDict = globals()
> > > ...     globalDict[varName] = '||' + globalDict[varName] + '>>'
> > > ...     return
> > > ...
> > > >>> s = 'Char'
> > > >>> t = s
> > > >>> changeString('s')
> > > >>> s
> > > '||Char>>'
> > > >>> t
> > > 'Char'
> > >
> > > Further note that this only affects variables in the global scope.  I
> > > hope this helps!
> > >
> > >     --Jason
> >
> > Ok so let me see if I understand. The globalDict is just a dictionary
> > containing the name of the global variables as the keys and their
> > values as the values of the dictionary? Thus the inputed variable is
> > treated like a global variable?
>
> The answer to your first question is yup!  You've got it.  That's what
> the globals() function returns.  (There is also a function locals()
> that returns a similar dict but for locals.)
>
> The answer to your second question is no.  The inputed *name* (the
> changeString() function must be passed a string, not a variable) must
> be the name of an object in the global scope for the function to work.
>
> You almost certainly want to use a function like the thefunc() function
> that Jason posted.
>
> One other thing, you could define it like so:
>
> def thefunc(s):
>     return '||%s>>' % s
>
>
> Peace,
> ~Simon

Certainly.  I do want to add a warning: do not modify the dictionary
returned from locals(). Please note the warning given at
"http://docs.python.org/lib/built-in-funcs.html#l2h-45".

    --Jason




More information about the Python-list mailing list