<br><div class="gmail_quote">On Thu, Jul 22, 2010 at 9:24 AM, <span dir="ltr"><<a href="mailto:gregory.smith3@sympatico.ca">gregory.smith3@sympatico.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>
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></div></blockquote><div><br></div><div>Yuck. Anyone who feels they need a variable named the same a reserved word simply feels wrong and needs reeducation. New words are introduced very rarely and we do care about the ramifications when we do it.</div>
<div><br></div><div>What next? An optional way to support case insensitive names using a unicode character prefix?</div><div><br></div><div>-gps</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><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: <a href="mailto:jnoller@gmail.com" target="_blank">jnoller@gmail.com</a><br>> To: <a href="mailto:bartosz-tarnowski@zlotniki.pl" target="_blank">bartosz-tarnowski@zlotniki.pl</a><br>
> CC: <a href="mailto:python-dev@python.org" target="_blank">python-dev@python.org</a><br>> Subject: Re: [Python-Dev] Set the namespace free!<div><div></div><div class="h5"><br>> <br>> On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski<br>
> <<a href="mailto:bartosz-tarnowski@zlotniki.pl" target="_blank">bartosz-tarnowski@zlotniki.pl</a>> 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>> <a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br>
> <a href="http://mail.python.org/mailman/listinfo/python-dev" target="_blank">http://mail.python.org/mailman/listinfo/python-dev</a><br></div></div>> Unsubscribe: <a href="http://mail.python.org/mailman/options/python-dev/gsmith%40alumni.uwaterloo.ca" target="_blank">http://mail.python.org/mailman/options/python-dev/gsmith%40alumni.uwaterloo.ca</a><br>
</div>
<br>_______________________________________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org">Python-Dev@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-dev" target="_blank">http://mail.python.org/mailman/listinfo/python-dev</a><br>
Unsubscribe: <a href="http://mail.python.org/mailman/options/python-dev/greg%40krypto.org" target="_blank">http://mail.python.org/mailman/options/python-dev/greg%40krypto.org</a><br>
<br></blockquote></div><br>