user variables

John Hunter jdhunter at ace.bsd.uchicago.edu
Tue Jun 24 23:50:11 EDT 2003


>>>>> "user" == user  <user at domain.invalid> writes:
    user> I tried globals(), locals() and vars(), but they all mix my
    user> user-defined variables with system ones... clues? ideas?

These are the right functions to be thinking about.  If I may be so
bold, perhaps you are not asking the right question.  What is it you
need to do?  You say you want to get the user defined variables.  To
what end?  Perhaps if you describe what it is you need to do, not how
you plan to do it, someone can offer an insightful solution.

Barring that, would it be helpful to remove the system/module vars by
first saving the keys of locals before user input, eg

from os import *  # import a bunch of non user-defined names for testing

def diffkeys(k1, k2):
    "return the keys in d1 that are not in d2"
    k2d = dict( [(k,1) for k in k2] )
    return [k for k in k1 if not k2d.has_key(k)]

def items_for_keys(keys, d):
    "return a list of (k,v) pairs for given keys in dict d"
    seen = dict( [(k,1) for k in keys] )
    return [ (k,v) for k,v in d.items() if seen.has_key(k)]

base = locals().keys()
#now come the user vars
x = 1
y = 2
new = locals().keys()
new.remove('base')    #a user var we aren't interested in
print items_for_keys(diffkeys(new, base), locals())


JDH





More information about the Python-list mailing list