On Tue, Mar 1, 2011 at 7:10 PM, Sean Carolan <scaro...@gmail.com> wrote: > On Tue, Mar 1, 2011 at 11:55 AM, Sean Carolan <scaro...@gmail.com> wrote: >> Maybe someone can help with this. I have a function that takes a >> single file as an argument and outputs a tuple with each line of the >> file as a string element. This is part of a script that is intended >> to concatenate lines in files, and output them to a different file. > > Not sure if this is the "right" or best way to do this, but I ended up > using vars() to assign my variable names, like so: > > import sys > > myfiles = tuple(sys.argv[1:]) > numfiles = len(myfiles) > varlist = [] > > def makeTuple(file): > 6 lines: outlist = [] ---------- > > for i in range(numfiles): > varlist.append('tuple'+str(i)) > vars()[varlist[i]] = makeTuple(myfiles[i])
http://docs.python.org/library/functions.html#vars As you can see in the documentation, you really shouldn't modify the object returned by vars() or locals(). It might work in some cases for some implementations of python, but it's actually an undefined operation, which basically means that an implementation may do anything it damn well pleases when you try to actually do it. Really, you shouldn't be trying to dynamically add variables to the namespace for each tuple, it's dangerous and can introduce all sorts of hard-to-catch bugs. Instead, put all your tuples in a list, and address them by index: tuples = [] for file in myfiles: tuples.append(makeTuple(file)) now you can address your tuples by tuples[0], tuples[1] and so forth, which is pretty much the same as tuple0, tuple1, etc. Even better, since it's in a list we can also iterate over it now with a for loop, isn't that great? Note also how I'm iterating over the myfiles list, which means I don't have to use the range() function together with indexing with i, which is a lot more readable. HTH, Hugo PS: There's even shorter ways to write this little script, but I won't bother you with them. If you want to know, check the map function, and list comprehensions. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor