R
Ron_Adam
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 ====[globals]
__builtins__ --> <module>
__doc__ --> <docstring>
__file__ --> C:\Python24\Lib\idlelib\idle.pyw
__name__ --> __main__
idlelib --> <module>
[globals]pnames --> said:John = 8
Fred = 6
Winner = John
players = [John, Fred]
pnames()
__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.
[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.
[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