Can I get a value's name

John O'Hagan research at johnohagan.com
Mon May 11 20:21:58 CEST 2009


On Mon, 11 May 2009, jalanb3 wrote:

[...]

>
> def replace_line(pattern,replacement):
>     errors = '\n' in pattern and [ 'pattern' ] or []
>     errors += '\n' in replacement and [ 'replacement' ] or []
>     values = [ locals()[e] for e in errors ]
>     # etc, etc, and eventually:
>     print 'Argument %s is bad : "%s"' % (errors[0],values[0])
>
> And the question arises from that locals() line:
>     Given a variable name I can use locals() to get the value
>     Is there a way to do it the other way round
>         Given the value, can I get the variable name ?
>
> For example, suppose I had started like this (using the variables, not
> strings with their names)
>
> def replace_line(pattern,replacement):
>     values = '\n' in pattern and [ pattern ] or []
>     values += '\n' in replacement and [ replacement ] or []
>
> Can I later get the name "pattern" via values[0]?
>
[...]

def replace_line(pattern,replacement):
    values = '\n' in pattern and [ pattern ] or []
    values += '\n' in replacement and [replacement] or []
    loc=locals()
    print [i for i in loc if loc[i] is pattern if pattern in values]

will print ['pattern'] if the value of pattern is in values (if there's a 
newline in pattern). Is that what you're after?

HTH,

John



More information about the Python-list mailing list