<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
I agree with the idea, but a far less radical change is needed to get the desired result.<br>The basic idea is this: it should be possible to use any name as an identifier in the syntax, including names<br>like 'while' and 'import'. But there is no need to mess up the entire language to allow this<br>(either by quoting all the identifiers, perl-style, or by marking the keywords). <br><br>All that is needed is something like this:<br><br>foo = 7<br>:foo = 7&nbsp;&nbsp; # exactly like foo=7<br>:while= 3&nbsp; # assigns 3 to variable 'while'<br>globals()['while']=3&nbsp; # current way to do this<br><br>print element.:for&nbsp; # from example below<br>#<br># keyword parameters to a function call:<br>#<br>BuildUrlQuery( lang='en', item='monsoon', :class='normal')&nbsp; # -&gt; "?lang=en&amp;query=monsoon&amp;class=normal"<br><br><br>The generic keyword function call is a really nice language feature, but it's rather impaired by the need to avoid<br>those names which happen to be keywords.<br><br>The lack of this is most painful when you are auto-generating python code which forms a bridge to another language with its own<br>namespace (as in XML example). It's a pain when some of the names you might generate could conflict with python keywords. <br>So, you end up using dicts and getattrs for everything and the code gets much less readable. With a simple escape like :name available,<br>it's worthwhile to do everything with identifiers and generate the escape only as needed for these.<br><br><br>One of the great strengths of python is the ability to form cleans and comprehensive bridges to other languages and environments (thus,<br>in many cases, avoiding the need to write programs in those other environments :-) ). This feature would fill a gap there.<br><br>The python tcl/tk interface is a bit messed up since tcl/tk uses some 
names for options which conflict with python keywords,<br>
and so you need to add '_' to those names.<br>
<br>There is a feature like this in VHDL:&nbsp; \name\ and \while\ are identifiers, the backslashes are not part of the name, but just<br>quote it. In&nbsp; VHDL you can write identifiers like&nbsp; \22\, and \!This?is=Strange\ as well; since VHDL creates modules that<br>have named ports, and those modules can interface to things generated by other environments, they needed a<br>way to assign any name to a port.<br><br>For python, I'm not sure it makes sense to allow identifiers that doesn't follow the basic rule "[A-Za-z_][A-Za-z_0-9]*" -- that could<br>break some debugging tools which expect variable names to be well-formed -- but it would be useful <br>to be able to use any well-formed name as an identifier, including those which happen to be keywords.<br><br>I've suggested :name, which doesn't break old code, and doesn't require using any new punctuation. Syntax would not change,<br>just the lexical definition of 'identifier'.&nbsp; If the intent is to allow arbitrary names (not just well-formed ones), then n'name' would<br>work better (and is consistent with existing stuff).<br><br><br><br>&gt; Date: Thu, 22 Jul 2010 10:41:39 -0400<br>&gt; From: jnoller@gmail.com<br>&gt; To: bartosz-tarnowski@zlotniki.pl<br>&gt; CC: python-dev@python.org<br>&gt; Subject: Re: [Python-Dev] Set the namespace free!<br>&gt; <br>&gt; On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski<br>&gt; &lt;bartosz-tarnowski@zlotniki.pl&gt; wrote:<br>&gt; &gt;<br>&gt; &gt; Hello, guys.<br>&gt; &gt;<br>&gt; &gt; Python has more and more reserved words over time. It becomes quite<br>&gt; &gt; annoying, since you can not use variables and attributes of such names.<br>&gt; &gt; Suppose I want to make an XML parser that reads a document and returns an<br>&gt; &gt; object with attributes corresponding to XML element attributes:<br>&gt; &gt;<br>&gt; &gt;&gt; elem = parse_xml("&lt;element param='boo'/&gt;")<br>&gt; &gt;&gt; print elem.param<br>&gt; &gt; boo<br>&gt; &gt;<br>&gt; &gt; What should I do then, when the attribute is a reserver word? I could use<br>&gt; &gt; trailing underscore, but this is quite ugly and introduces ambiguity.<br>&gt; &gt;<br>&gt; &gt;&gt; elem = parse_xml("&lt;element for='each'/&gt;")<br>&gt; &gt;&gt; print elem.for_ #?????<br>&gt; &gt;&gt; elem = parse_xml("&lt;element for_='each'/&gt;")<br>&gt; &gt;&gt; print elem.for__ #?????<br>&gt; &gt;<br>&gt; &gt; My proposal: let's make a syntax change.<br>&gt; &gt;<br>&gt; &gt; Let all reserved words be preceded with some symbol, i.e. "!" (exclamation<br>&gt; &gt; mark). This goes also for standard library global identifiers.<br>&gt; &gt;<br>&gt; &gt; !for boo in foo:<br>&gt; &gt; &nbsp; &nbsp;!if boo is !None:<br>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;!print(hoo)<br>&gt; &gt; &nbsp; &nbsp;!else:<br>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;!return !sorted(woo)<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; This would allow the user to declare any identifier with any name:<br>&gt; &gt;<br>&gt; &gt; for = with(return) + try<br>&gt; &gt;<br>&gt; &gt; What do you think of it? It is a major change, but I think Python needs it.<br>&gt; &gt;<br>&gt; &gt; --<br>&gt; &gt; haael<br>&gt; &gt;<br>&gt; <br>&gt; I'm not a fan of this - I'd much prefer[1] that we use the exclamation<br>&gt; point to determine scope:<br>&gt; <br>&gt; foobar - local<br>&gt; !foobar - one up<br>&gt; !!foobar - higher than the last one<br>&gt; !!!foobar - even higher in scope<br>&gt; <br>&gt; We could do the inverse as well; if you append ! you can push variable<br>&gt; down in scope.<br>&gt; <br>&gt; Jesse<br>&gt; <br>&gt; <br>&gt; [1] I am not serious.<br>&gt; _______________________________________________<br>&gt; Python-Dev mailing list<br>&gt; Python-Dev@python.org<br>&gt; http://mail.python.org/mailman/listinfo/python-dev<br>&gt; Unsubscribe: http://mail.python.org/mailman/options/python-dev/gsmith%40alumni.uwaterloo.ca<br>                                               </body>
</html>