<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 # exactly like foo=7<br>:while= 3 # assigns 3 to variable 'while'<br>globals()['while']=3 # current way to do this<br><br>print element.:for # from example below<br>#<br># keyword parameters to a function call:<br>#<br>BuildUrlQuery( lang='en', item='monsoon', :class='normal') # -> "?lang=en&query=monsoon&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: \name\ and \while\ are identifiers, the backslashes are not part of the name, but just<br>quote it. In VHDL you can write identifiers like \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'. 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>> Date: Thu, 22 Jul 2010 10:41:39 -0400<br>> From: jnoller@gmail.com<br>> To: bartosz-tarnowski@zlotniki.pl<br>> CC: python-dev@python.org<br>> Subject: Re: [Python-Dev] Set the namespace free!<br>> <br>> On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski<br>> <bartosz-tarnowski@zlotniki.pl> wrote:<br>> ><br>> > Hello, guys.<br>> ><br>> > Python has more and more reserved words over time. It becomes quite<br>> > annoying, since you can not use variables and attributes of such names.<br>> > Suppose I want to make an XML parser that reads a document and returns an<br>> > object with attributes corresponding to XML element attributes:<br>> ><br>> >> elem = parse_xml("<element param='boo'/>")<br>> >> print elem.param<br>> > boo<br>> ><br>> > What should I do then, when the attribute is a reserver word? I could use<br>> > trailing underscore, but this is quite ugly and introduces ambiguity.<br>> ><br>> >> elem = parse_xml("<element for='each'/>")<br>> >> print elem.for_ #?????<br>> >> elem = parse_xml("<element for_='each'/>")<br>> >> print elem.for__ #?????<br>> ><br>> > My proposal: let's make a syntax change.<br>> ><br>> > Let all reserved words be preceded with some symbol, i.e. "!" (exclamation<br>> > mark). This goes also for standard library global identifiers.<br>> ><br>> > !for boo in foo:<br>> > !if boo is !None:<br>> > !print(hoo)<br>> > !else:<br>> > !return !sorted(woo)<br>> ><br>> ><br>> > This would allow the user to declare any identifier with any name:<br>> ><br>> > for = with(return) + try<br>> ><br>> > What do you think of it? It is a major change, but I think Python needs it.<br>> ><br>> > --<br>> > haael<br>> ><br>> <br>> I'm not a fan of this - I'd much prefer[1] that we use the exclamation<br>> point to determine scope:<br>> <br>> foobar - local<br>> !foobar - one up<br>> !!foobar - higher than the last one<br>> !!!foobar - even higher in scope<br>> <br>> We could do the inverse as well; if you append ! you can push variable<br>> down in scope.<br>> <br>> Jesse<br>> <br>> <br>> [1] I am not serious.<br>> _______________________________________________<br>> Python-Dev mailing list<br>> Python-Dev@python.org<br>> http://mail.python.org/mailman/listinfo/python-dev<br>> Unsubscribe: http://mail.python.org/mailman/options/python-dev/gsmith%40alumni.uwaterloo.ca<br>                                            </body>
</html>