c[:]()
Warren Stringer
warren at muse.com
Thu May 31 17:44:49 EDT 2007
Quotes out of context with mistaken assumptions, now follow:
> >>>> So c[:]() -- or the more recent go(c)() -- executes all those
> >>>> behaviors.
>
> No it doesn't. See below.
> >
> > If c[:]() works, the so does this, using real world names
> >
> > orchestra[:].pickle()
> > orchestra[conductor()].sequence()
> >
> > Though, I'm already starting to prefer:
> >
> > do(orchestra).pickle()
> > do(orchestra(conductor)).sequence()
> >
> Yes, dammit, but c[:]() *DOESN'T WORK* unless you have made some pretty
> crufty changes to the underlying object.
I started this thread asking why c[:]() doesn't work.
> This is what I'm having difficulty understanding. You said, in your
> original post (which, by the way, hijacked another thread about
> something completely different):
What?!? I started this thread.
> > I want to call every object in a tupple, like so:
> >
> [By the way, that's "tuple", not "tupple"]
> > #------------------------------------------
> > def a: print 'a'
> > def b: print 'b'
> > c = (a,b)
> >
> >>>> >>>c[:]() # i wanna
> > TypeError: 'tupple' object is not callable
> >
> >>>> >>>c[0]() # expected
> > a
> >>>> >>>c[:][0] # huh?
> > a
> This is what I just don't believe. And, of course, the use of "tupple"
> above tells us that this *wasn't" just copied and pasted from an
> interactive session.
Try it.
> >>>> >>> [i() for i in c] # too long and ...huh?
> > a
> > b
> > [None,None]
> > #------------------------------------------
> This is also clearly made up.
I repeat: try it.
> In a later email you say:
>
> > why does c[:][0]() work but c[:]() does not?
>
> The reason for this ...
Stated elsewhere, but thanks
> > Why does c[0]() has exactly the same results as c[:][0]() ?
>
> The reason for this is that c is exactly the same as c[:]. The slicing
> notation "[:]" tells the interpreter to use a tuple consisting of
> everything in the tuple to which it's applied. Since the interpreter
> knows that tuples are immutable (can't be changed), it just uses the
> same tuple -- since the immutability there's no way that a difference
> could arise between the tuple and a copy of the tuple, Python doesn't
> bother to make a copy.
>
> This behavior is *not* observed with lists, because lists are mutable.
But neither tupples or lists work, so immutability isn't an issue.
> I realise you are trying to find ways to make Python more productive for
> you, and there's nothing wrong with that. But consider the following,
> which IS copied and pasted:
>
> >>> def a():
> ... print "A"
> ...
> >>> def b():
> ... print "B"
> ...
> >>> c = (a, b)
> >>> c
> (<function a at 0x7ff4f764>, <function b at 0x7ff4f64c>)
> >>> c[:]
> (<function a at 0x7ff4f764>, <function b at 0x7ff4f64c>)
> >>> c[0]()
> A
> >>> c[1]()
> B
> >>> c()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: 'tuple' object is not callable
> >>> c[:]()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: 'tuple' object is not callable
> >>>
I never said that c() would execute a list nor did I ever say that c[:]()
would execute a list.
> I think the fundamental mistake you have made is to convince yourself that
>
> c[:]()
>
> is legal Python. It isn't, it never has been.
In summation:
I started this thread asking why c[:]() wouldn't work
I did not hijack another thread
I posted working examples (with one typo, not quoted here)
I am extremely annoyed by this post
Tis best not to assume what other people are thinking
More information about the Python-list
mailing list