[Tutor] Convert string to variable name

Liam Clarke cyresse at gmail.com
Thu Jan 27 23:37:11 CET 2005


I've used something along the lines for Pythoncard, but the names are
generated within strict rules and expectations.

i.e. 

first off – 

#Some code that uses regExs, finds all headings, and 	
# a asterisk to indicate a date value, returns a iterable object
reHead using finditer()
#which contains two groups, head and date
#date is either a '' or '*' which evals to False/ True for my purposes
#The asterisk isn't important, it's just a non-null.


counter = 0 # I use nums as keys for easy sort/increment
dex={}

for item in reHead:
      dex[counter]={'title':item.group('head'),
                              'date': item.group('date') }
       counter += 1

j=cPickle.Pickler(someOpenFile)
j.dump(dex)
someOpenFile.close()

####

x=cPickle.Unpickler(someOpenFile)
dex2 = x.read()

for key in dex2.keys():
      buttName = '%dbutton' % key
      choiceName = %dchoice % key

      if dex2[key]['date']:
          choiceList=['Past', Present', 'Future']
      else:
           choiceList = ['Highest', 'Lowest', 'Average']

      self.components[buttName] = {
                                                        'type': 'button',
                                                        'name': buttName,
                                                        'label' :
dex2[key]['title']
                                                         …..
                                                          }

      self.components[choiceName] = {
                                                            'type': 'choice',
                                                            'name': choiceName,
                                                            'label' :
"Select option",
                                                            'items' :
choiceList,
					'stringSelection': choiceList[0] 
                                                             }

 
Only reason I do it this way, as opposed to using a list, is a stylistic choice.
But yeah, you end up iterating a whole lot, and unless the variable
names are generated
predictably, you have a hard time referencing stuff.
So, in conclusion, dynamically named variables are very limited in
their usefulness.



On Thu, 27 Jan 2005 09:21:51 -0000, Alan Gauld <alan.gauld at freenet.co.uk> wrote:
> > This is something I've been trying to figure out for some time.  Is
> > there a way in Python to take a string [say something from a
> > raw_input] and make that string a variable name?  I want to to this
> so
> > that I can create class instances on-the-fly, using a user-entered
> > string as the instance name.
> 
> This comes up regularly from beginners and is nearly always a bad
> idea!
> 
> The easy solution is to use a dictionary to store the instances.
> See the OOP topic in my tutor for an example using bankAccounts
> as the objects...
> 
> > could accomplish something similar using a plain old dictionary, but
> I
> > was playing around with the OOP stuff and thought it might be a neat
> > thing to try out.
> 
> A Dictionary is best. The problem is, once you create your new
> variables none of the rest of your code knows aout them so
> how can it access them. And what if someone enters a name that
> is being iused elsewhere in your code? You will overwrite a
> real variable with this new object! Very tricky to control.
> 
> Alan G
> Author of the Learn to Program web tutor
> http://www.freenetpages.co.uk/hp/alan.gauld
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


-- 
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.


More information about the Tutor mailing list