On 30 Mar 2005 08:43:17 GMT, Duncan Booth <[EMAIL PROTECTED]> wrote: >Here is a rough attempt at printing the names of a variable. It will pick >up several names where appropriate, but deliberately doesn't attempt to >get all possible names (as you say, that could result in endless loops). >In particular, for the Fred=5/John=8/Winner=8 example it will only find >one of John or Winner since it only picks at most one match from each dict >or list. It doesn't yet manage to correctly lookup attributes (e.g. slots) >when they aren't stored in a __dict__, nor does the output distinguish >between dictionary keys and values (so encodings.cp437.encoding_map[8] >below actually refers to the key not the value).
Here's what I've been working on. It still has some glitches in it but I think it has potential as a instructional/diagnostict tool I'm going to repost this with the source as it's own topic, maybe it can be developed further. :) Cheers, Ron IDLE 1.1.1c1 ==== No Subprocess ==== >>> from pnames import pnames >>> pnames() [globals] __builtins__ --> <module> __doc__ --> <docstring> __file__ --> C:\Python24\Lib\idlelib\idle.pyw __name__ --> __main__ idlelib --> <module> pnames --> <function> Paused >>> John = 8 >>> Fred = 6 >>> Winner = John >>> players = [John, Fred] >>> pnames() [globals] __builtins__ --> <module> __doc__ --> <docstring> __file__ --> C:\Python24\Lib\idlelib\idle.pyw __name__ --> __main__ Fred --> 6 idlelib --> <module> John --> 8 players --> [8, 6] pnames --> <function> Winner --> 8 Paused Both winner and John point to the litteral '8', but since the number '8' can never be changed, it doesn't matter, but you can look up the number '8' and find both John and Winner, but changing one, doesn't change the other. >>> John = 9 >>> pnames() [globals] __builtins__ --> <module> __doc__ --> <docstring> __file__ --> C:\Python24\Lib\idlelib\idle.pyw __name__ --> __main__ Fred --> 6 idlelib --> <module> John --> 9 players --> [8, 6] pnames --> <function> Winner --> 8 Paused Winner didn't change it's value. >>> scores = players >>> pnames() [globals] __builtins__ --> <module> __doc__ --> <docstring> __file__ --> C:\Python24\Lib\idlelib\idle.pyw __name__ --> __main__ Fred --> 6 idlelib --> <module> John --> 9 players --> [8, 6] <-- scores pnames --> <function> scores --> [8, 6] <-- players Winner --> 8 Paused >>> Here, players and scores are both mutable, changeing them will change the other and so it shows that the list [8,6] has more than one name. Cheers, Ron -- http://mail.python.org/mailman/listinfo/python-list