On Tue, 7 Jun 2005, D. Hartley wrote:
> OK. I tried them out and I do see the diffence. (btw, testit1 gave me
> the following error:
>
> Traceback (most recent call last):
> File "<pyshell#72>", line 1, in ?
> testit1()
> File "<pyshell#68>", line 3, in testit1
> del fromlist[0]
> IndexError: list assignment index out of range
>
> ... was that something you intended? that didnt happen with my
> original problem).
Interesting; I get this:
testit1: Denise problem
a
b
c
testit2: Python Gotcha #6
a
b
c
testit3: the right way
a
a
a
> Anyway I def notice the diff between 2 and 3, but see here's the thing:
>
> I think I *do* want it like #2, becaues I want it to keep returning
> the same list (i.e., move on and use line 2 (b), and then line 3 (c),
> and so on), rather than keep iterating over the same first line (a)
> over and over again.
Okay, gotcha.
Here's my take on this sort of thing: I like to look at a method as a
black box, defined by the method signature and its call. My basic rule is
that I don't every like a method to alter any data except what it passes
back.
So... My approach, which I think is a little more clean and isolatable, is
to pass anything that the function needs to operate in as a parameter;
then, if I want to alter that list, I create a new copy and pass that
back. I have a deep distrust of globals.
So instead of this:
def snip_first:
delete alist[0] # find alist via scoping rules
return
and calling it like this:
alist = ['a', 'b', 'c']
snip_first()
I'd prefer to set it up like thi:
def snip_first(input_list):
output_list = alist[:]
delete output_list[0]
return output_list
alist = ['a', 'b', 'c']
alist=snip_first(alist)
(Both of these are untested, I'm just winging it here.)
> I want to take the first line in the picture,
> rearrange the pixels, and pop that line into the new list that I can
> then (eventually) create a new image from. I *thought* my list was
> populated (it's 307200 pixels long, after all), but it wont work when
> i try to putdata it onto a new blank image.
I don't know about you, but if it were me, without that encapsulation, I'd
have a tough time figuring out what's getting modified when.
> > > where does the variable named "fromlist" come from? It's not passed into
> > > the method as a parameter.
>
> No, I had it defined right before the function. it pulls it in just
> fine.
Yes, but global scoping often messes me up, so I always use a local scope.
If it's not parameter-passed into or created in a method, I don't use it
in the method.
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor