[Python-ideas] relaxing keyword usage restrictions

Terry Reedy tjreedy at udel.edu
Fri Sep 9 18:05:52 CEST 2011


On 9/9/2011 3:21 AM, H Krishnan wrote:

>     P.S.. Yes, that's valid scheme? So what? Redefining 'define' pretty
>     much guarantees that the rest of your program will fail.
>
>     (define  define  3)
>     (display  (*  define  5))=>  15
>     (define  x4)=>  FAIL
>
>     The fact that another language allows you to shoot yourself in the
>     foot isn't a good argument that Python should allow that too.
>
> Yes, scheme does not have special syntax for 'keywords' but still allows
> keywords to be overridden.

In the above, 'define' is not a keyword, it is a built-in function or 
macro name. Python allows those to be over-ridden too, with the same 
consequence.

list = 3
list(1,2,3) # TypeError: 'int' object is not callable

Because of its simple one-syntax-fits-all-needs design, I do not think 
Scheme has or needs functional keywords in the way Python does. For 
instance, the class statement, with it 'class' keyword, can be replaced 
by a call to the builtin 'type' class. The name 'type' can be 
over-ridden just like 'define' above.

Perhaps Scheme has value keywords like Common Lisp (NIL?), I don't know. 
From
https://secure.wikimedia.org/wikipedia/en/wiki/Keyword_%28computer_programming%29

"In Common Lisp, the term "keyword" (or "keyword symbol") is used for a 
special sort of symbol, or identifier. Unlike other symbols, which 
usually stand for variables or functions, keywords are self-quoting and 
evaluate to themselves. Keywords are usually used to label named 
arguments to functions, and to represent symbolic values."

Python has keyword values None, False, and True. These used to just be 
builtin identifiers that could be over-ridden, but were made keywords to 
prevent that.

 > But nothing (but syntax highlighters)

and the parser -- see my other post and Paul Moore's followup.

> will break in Python by allowing keywords as identifiers,

If you disagree, try changing the grammar to do what you want while 
keeping Python an LL(1) language.

 > and so it is a less drastic change for Python.

We seem to have different ideas of 'drastic' ;-).

-- 
Terry Jan Reedy




More information about the Python-ideas mailing list