D'Arcy J.M. Cain wrote: > On Mon, 22 Dec 2008 22:32:17 -0500 > Aaron Stepp <stepp.aa...@gmail.com> wrote: >> Instead of writing a long list of initializations like so: >> >> A = [ ] >> B = [ ] >> ... >> Y = [ ] >> Z = [ ] >> >> I'd like to save space by more elegantly turning this into a loop. If > > Well, if all you want is a loop: > > for v in vars: > locals()[v] = [] > Note that this isn't guaranteed to work. While locals() will return a dict containing the names and values from the local namespace, you won't affect the local namespace by assigning values to the appropriate keys:
>>> def f(): ... a = "hello" ... locals()["a"] = "goodbye" ... print a ... >>> f() hello >>> If you look at the function's code you will see that the local "a" is accessed using the LOAD_FAST and STORE_FAST opcodes, which take advantage of the knowledge that the name is local - the interpreter analyzed the function body looking for assignments to non-globals, and optimizes its treatment of such names. >>> dis.dis(f) 2 0 LOAD_CONST 1 ('hello') 3 STORE_FAST 0 (a) 3 6 LOAD_CONST 2 ('goodbye') 9 LOAD_GLOBAL 0 (locals) 12 CALL_FUNCTION 0 15 LOAD_CONST 3 ('a') 18 STORE_SUBSCR 4 19 LOAD_FAST 0 (a) 22 PRINT_ITEM 23 PRINT_NEWLINE 24 LOAD_CONST 0 (None) 27 RETURN_VALUE >>> > It's hard to tell if that's what you actually need though without > deeper analysis of your requirements. > I think it's unlikely that the OP really does need to create names dynamically, and should look at using either a dict indexed by the letters of self.__abet, or a list indexed from 0 to 24 instead. But you *are* correct about the need for a little more information ;-) regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list