Re: iterating initalizations
import random from rtcmix import * from chimes_source import * # Chime.play() from rhythmblock import * # rhythmBlock.rhythmTwist() and rhythmBlock.printStuff() from pitchblock import * # pitchBlock.pitchTwist() and pitchBlock.printStuff() from lenEval import * #greaterThan.sovler() indexrand = random.Random() indexrand.seed(2) chime = Chime() notes = pitchBlock() rhythm = rhythmBlock() solve = greaterThan() class arrayBlock: def __init__(self, theTempo, start): self.__A = [] self.__B = [] self.__start = start self.__tempo = theTempo def player(self, length, tempo, octave, pan, seed): tempo = (120, self.__tempo) for a in range(length): one = indexrand.randint(0, 3) two = indexrand.randint(0, 7) self.__A = self.__A + notes.pitchTwist(one , two) for b in range(length): one = indexrand.randint(0, 3) two = indexrand.randint(0, 7) self.__B = self.__B + rhythm.rhythmTwist(one , two) lenA = len(self.__A) lenB = len(self.__B) var = solve.solver(lenA, lenB) for c in range(var): print self.__A[c] self.__start = self.__start + tb(self.__B[var]) chime.play(self.__start, self.__A[var], octave, pan, seed) This almost does exactly what I want, and is far cleaner than my previous attempts. The only problem is that now all my arguments are being passed as zeros! I assume this has to do with WHEN I'm referencing self.__A and self.__B? AS On Dec 23, 2008, at 10:20 AM, Steve Holden wrote: 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_FUNCTION0 15 LOAD_CONST 3 ('a') 18 STORE_SUBSCR 4 19 LOAD_FAST0 (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 -- http://mail.python.org/mailman/listinfo/python-list
iterating initalizations
Hi all: I'm new to python and trying to save time and code by iterating through list initializations as well as the assignments. I have the following code: import random from rtcmix import * from chimes_source import * from rhythmblock import * from pitchblock import * indexrand = random.Random() indexrand.seed(2) rhythm = rhythmBlock() pitch = pitchBlock() class pitchAndRhythm: def __init__self: self.__abet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def listCreate(self, num): if num 25: print Oops. This won't work else: for a in range(num): b = indexrand.randint(0, 3) c = indexrand.randint(0, 7) index = self.__abet[a] index = [ ] index = index.append(rhythm.rhythmTwist(b, c)) This doesn't do what I expect (probably because I don't have a clue what I'm doing!): initalizing, then filling new arrays, each new one called A[ ], then B[ ], etc. This seems very un-pythonic, and I'm sure there is a right way to do it. I'm just lost! Thanks Aaron Stepp -- http://mail.python.org/mailman/listinfo/python-list
Re: iterating initalizations
On Dec 22, 2008, at 10:15 PM, r wrote: I can't check you code because i don't have these modules but here is the code with proper indention import random from rtcmix import * from chimes_source import * from rhythmblock import * from pitchblock import * indexrand = random.Random() indexrand.seed(2) rhythm = rhythmBlock() pitch = pitchBlock() class pitchAndRhythm: def __init__(self): self.__abet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def listCreate(self, num): if num 25: print Oops. This won't work else: for a in range(num): b = indexrand.randint(0, 3) c = indexrand.randint(0, 7) index = self.__abet[a] index = [ ] index = index.append(rhythm.rhythmTwist(b, c)) take 2: notice the ( and ) around the arg to __init__ Thanks for the help so far, I think I'm starting to get a hang of the syntax. I think I need to state my goal more clearly. 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 I need to just write it out, I guess that's ok... but it would be much cleaner. I'm a composer, not a programmer, so some of this is quite above me. I usually ask as a last resort, but I've been through the tutorial and didn't find this. I've got a couple python books, but I'd like to finish this piece sooner than later. Thanks! AS -- http://mail.python.org/mailman/listinfo/python-list
Re: iterating initalizations
On Dec 22, 2008, at 10:43 PM, Chris Rebert wrote: On Mon, Dec 22, 2008 at 7:32 PM, Aaron Stepp stepp.aa...@gmail.com wrote: snip Thanks for the help so far, I think I'm starting to get a hang of the syntax. I think I need to state my goal more clearly. 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 I need to just write it out, I guess that's ok... but it would be much cleaner. I'm a composer, not a programmer, so some of this is quite above me. So, are these variables supposed to be module-level, or attributes of class pitchAndRhythm, or what? Also, are you going to use the variables normally or are you going to need variable variables (e.g. like $$var in PHP, which gives the value of the variable with the name of the string stored in $var)? Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com The're going to only be part of the pitchAndRhythm class. Simply put, I just need enough arrays to hold a list of pitches/rhythms. Then I'll have each list member returned to an instrument defined in another module. As I'm hacking away at the code, I'm realizing that maybe I can do this with just and A = [] and B = []. But I'm not sure... Thanks again. AS -- http://mail.python.org/mailman/listinfo/python-list