On Fri, Jan 03, 2014 at 01:55:29AM -0500, Keith Winston wrote: [...] > I want to iterate through a bunch of lists, subsequently printing both list > members (via indexing, for example) and the name of the list I'm on.
Why? What does this gain you? Now, it's true that when *debugging code*, being able to see the name of the variable and the contents of the variable is useful. But in ordinary code, why would you care to print the name of the variable and its contents. Who cares what the variable is named? Debuggers stick all sorts of nasty hooks into the running interpreter in order to do this (and much more), and we should all be thankful that (1) debuggers exist, (2) that they aren't running by default, and most importantly (3) that we don't have to write code like them. In addition to powerful debuggers, we also have fantastic poor-man's debugger called "print": for name, value in zip( 'alist blist clist'.split(), [alist, blist, clist]): print(name, "=", value) Yes, it's a little bit messy code. We have to repeat the name of the variable twice. But this isn't code that will hang around in the finished program. It only need exist for just long enough to debug the problem we're having (you are having a problem, I presume?), then, it's job done, it's gone. (Be ruthless at deleting code that isn't pulling its weight.) And in the meantime, the rest of our code doesn't need to use any nasty indirect code, it can just use (say) alist.append(42) instead of eval('alist').append(42). For longer-lasting indirect code, rather than use eval, its better to do something like this: namespace = { 'alist': [1, 2, 4, 8, 16, 32], 'blist': ['fe', 'fi', 'fo', 'fum'], 'clist': [1.5, 2.5, 3.5, 4.5, 5.5, 6.5] } for name, value in namespace.items(): print(name, "=", value) eval is a nuclear-powered bulldozer. Don't use it for cracking nuts. -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor