c[:]()

Warren Stringer warren at muse.com
Fri Jun 1 05:20:17 EDT 2007


> Warren Stringer wrote:
> 
> > `c[:]()` is unambiguous because:
> >
> >     def c(): print 'yo'
> >
> >     c()     # works, but
> >     c[:]()  # causes:
> >
> >     Traceback (most recent call last)...
> >         c[:]()  # causes:
> >     TypeError: unsubscriptable object
> >
> > There are many `c()` to be found in the wild and no `c[:]()`, thus
> > unambiguous. To be honest, I wasn't sure, until testing this, just now.
> 
>  >>> c = 'not quite'
>  >>> c[:]
> 'not quite'
>  >>> c[:]()
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
> TypeError: 'str' object is not callable


Interesting example. By extension
#-------------------------
>>> def c(): print 'yo'
...
>>> c
<function c at 0x00B867F0>
>>> c(bad)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'bad' is not defined
#-------------------------

Both your example and mine show well formed and ill formed statements at the
command line.

> You also seem to be under the impression that `x[:]()` is somehow
> special syntax that is treated differently than `y = x[:]; y()`.  It is
> not.

No; I was under the impression that `x[:]()` didn't work and the reason why
it didn't work wasn't obvious. 

I like your use case. Am I correct in assuming that `y = x[:]; y()` is NOT
to be found in working code? If that is the case, then nothing gets broken.
It would be instructive to have a use case where enabling c[:]() would break
existing code. 

> Besides, _ambiguity_ was never the problem.  _Functionality_ is the
> problem.

Ambiguity is one of many parameters. It was a problem with another poster. I
wish I had McConnel's Code Complete book handy. Let's see ... a search
yields: debugging, testing, performance, portability, design, interfaces,
style, and notation. 

My use case is this:

	do(orchestra(score)).pickle()
	do(orchestra(conductor)).sequence()

And so now, that I can, I am happy. Life is good. Time to sleep.




More information about the Python-list mailing list