Shane Hathaway wrote:
Kent Johnson wrote:
Brian Sabbey wrote:
Using suite-based keyword arguments, the code

f(x = 1)

is equivalent to

f():
   x = 1


ISTM the syntax is ambiguous. How do you interpret
if f():
  x = 1
?

Is a suite alllowed only when a block could not be introduced in the
current syntax?

I like this PEP a lot, but your concern is valid. Maybe Brian could modify the PEP slightly to disambiguate. How about using an ellipsis in the argument list to signify suite-based keywords? Examples:

f(...):
   x = 1

class C(object):
  x = property(...):
     doc = "I'm the 'x' property."
     def fget(self):
        return self.__x
     def fset(self, value):
        self.__x = value
     def fdel(self):
        del self.__x

d = dict(...):
   a = 1
   b = 2

Using an ellipsis in a statement that would begin a different kind of
block is illegal and generates a syntax error.  Note that this usage
seems to fit well with the definition of "ellipsis".

http://dictionary.reference.com/search?q=ellipsis

Shane

Yes, my description of the syntax was ambiguous. To clarify, I intended the syntax to be backwardly compatible. That is, one would not be able to use a suite to define keywords if there already exists a suite for other reasons. So, one would not be able to use a suite to pass keywords to 'f' in this situation:


if f():
     x = 1

This code should behave exactly as it does now.

I agree that the ellipsis idea probably makes the code more readable, and it may be a good idea to have them for that reason. However, ellipses are not necessary as a way to disambiguate the syntax; all statements containing suites currently begin with a keyword, and keyword suites would not.

-Brian
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to