Can I get a value's name
Alan Brogan
yahoo at al-got-rhythm.net
Mon May 11 23:15:50 EDT 2009
Thank you Ken for your help answer
On Mon, May 11, 2009 at 8:11 PM, Ken Seehart <ken at seehart.com> wrote:
> jalanb3 wrote:
>>
<snip>
>> 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]?
>>
<snip>
> A value generally does not contain the
> "pattern" or any kind of name information (although class, method, and
> function instances contain some symbolic information in them).
>
That's why I took the question seriously at all:
It was an entirely different project - pulling info out of
tracebacks into logs.
And I can get names from a reference for classes, modules, ...
Why not variables ?
> Study the concept of 'references' and all of this will become more clear.
I shall dive into that koan :-)
> The only way to do something like what you want would be to search globals()
> or locals() for the value (depending on the context), but that would be an
> extremely ugly hack.
Agreed
> Chances are that if you want to do this, you need to
> rethink the problem instead.
>
That does seem reasonable, but before I started writing Python it
would never occurred to me to add some attributes on to an object
whose definition I've never seen. So - unlikely, but I wouldn't rule
it out.
<snip>
> Note that a value can have several different names (and unnamed references)
> pointing at it,
Ah - there's the rub !
All it takes (from my earlier example) is
fred = pattern
values += [ fred ]
Now which is "the real name" of values[0]?
In my example I would have wanted "pattern", and now whatever ugly
hack we used to get at "the name" is turning into an complex module.
> so the above code is not very general, but it may illustrate
> some interesting points.
Thanks - it does indeed.
> My guess is that your entire approach may need rethinking. What is the
> ultimate objective of your project?
Find out what some other Pythonista have thought about this problem
OTOH: the actual objective was to remove the redundancy of using the
string "pattern" when I already have a perfectly good eponymous
variable. On balance I think allowing a little bit of redundancy is
prudent in this case :-)
More information about the Python-list
mailing list