[Python-Dev] Re: Decorators: vertical bar syntax
Terry Reedy
tjreedy at udel.edu
Sat Aug 7 07:05:55 CEST 2004
"Edward Loper" <edloper at gradient.cis.upenn.edu> wrote in message
news:41145C05.1020501 at gradient.cis.upenn.edu...
> The new "vertical bar" syntax was proposed recently, and has gotten
> almost unanimously positive feedback. In particular, of 17 responses
> to the syntax, only one has been negative (see table, below).
Add another +1. Verticle rules have been used before to tie several lines
together, either as continuation lines or as sub-lines.
> |classmethod
> |accepts(int, int)
> |returns(float)
> def foo(arg1, arg2):
> ...
>
> def foo(arg1, arg2):
> |classmethod
> |accepts(int, int)
> |returns(float)
> ...
> (I prefer the second, but would be happy with either.)
Both logically and visually, I prefer the second also. By logically, I
mean that it is more meaningful to me to read the decorators after reading
that we are defining a function.
My main objection is that I like the idea that the header is definition
time info and the body is run time code. I consider the doc string in the
body to be a wart, not a precedence to by copied, but maybe I should think
of the body as starting after the last | or the closing ''' :-).
> The one negative comment was that "|" can look similar to "I" or "l",
> depending on the font; but it's only an issue for some fonts, and it
> should be largely mitigated by syntax-highlighting.
Is a space allowed after the prefic character, whatever it might be? With
def foo():
| classmethod
| accepts(int,int)
| returns(float)
the visual similarity to I doesn't matter much. Actual typos leading to
test such as 'I returns' are guaranteed syntax errors, whereas a name such
as Ireturns is not. The space even more clearly matches standard usage of
a vertical rule and more clearly denotes the list as hanging off of 'def',
so I would be tempted to require the space.
Terry J. Reedy
More information about the Python-Dev
mailing list