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