[Tutor] introspection
Dave Angel
davea at davea.name
Fri May 8 13:16:53 CEST 2015
On 05/08/2015 02:26 AM, Alex Kleider wrote:
> On 2015-05-07 20:45, Dave Angel wrote:
>
>> You also only showed it working on module globals. (For code at
>> top-level, locals() returns the same as globals() )
>>
>> You could also try it inside functions, where locals() really makes
>> sense as a name. And you could try it in a nested function where
>> there may very well be non-locals (eg. closure items) that aren't
>> local or global.
>
> You've taken me to new territory:
> http://www.shutupandship.com/2012/01/python-closures-explained.html
> I wasn't familiar with 'closures' and to be truthful, still am not,
> although thanks to you I am at least aware of the idea.
>>
>> But more interestingly, you could try it on items of a list, or
>> members of a dictionary, where there's no name at all associated with
>> the object.
>
> It simply returns None. I assume that's the point you are making?
> (That it has no name, or perhaps more accurately expressed: there is
> no name to discover.)
>
That's right. But depending on why you're looking, it might be worth
doing some more subtle searching. For example, you're currently looking
at all the members of a dict. But if one of those members is of type
dict, list, or tuple, you could look at its members. If you do that
recursively, you could identify a lot more objects.
Also, since you have to pass the object into the search function, you
already have one known reference. That one might not be the interesting
one, as it might have been made just for this testing. So it would be
useful if this function produced a list of *all* the references it can find.
And you could have your function work from an id() value. Given an
integer, try to find names or expressions that yield this id value.
--
DaveA
More information about the Tutor
mailing list