Joseph Garvin wrote: > > I'm curious -- what is everyone's favorite trick from a non-python > language? And -- why isn't it in Python? >
1. Lisp's "dynamically scoped" variables (Perl has them, and calls them "local", but as far as I've seen their use their is discouraged). These are global variables which are given time-local bindings. That is, structuring the syntax after what's used for globals, x=10 def foo(): # No need to define x as it is only read -- same as globals print x def bar(): dynamic x x = 11 foo() def baz(): bar() # prints 11 foo() # prints 10; the binding in bar is undone when bar exits This feature makes using "globals" sensible, providing a way to avoid many important uses (and some say, misuses) of objects if you are so inclined. It allows you to do some things better than objects do, because it does to library parameters, what exceptions do to return codes: instead of passing them in all the way from outside until a piece of code which actually uses them, they are only mentioned where you set them and where you really need to access them. It would not be too hard to implement a version of this (inefficiently) in the existing language, if frame objects could carry a modifiable dictionary. I suppose it is not in Python because (most) Pythoners are not looking (hard enough) for alternatives to OOP. 2. Prolog's ability to add operators to the language. Though this facility is quite clanky in Prolog (because there is no elegant way to specify precedence), the idea is appealing to me. It would allow a better implementation of my (awkward, granted) recipe for adding logic programming constructs to Python. It is not in the language because it might fragmentize it, and because it is very hard to make recursive-descent parsers like CPython's programmable this way. 3. Lisp's Macros, of course, which have been mentioned already in this thread. Even Boo-like macros, which are nowhere as strong as Lisp's, would be very useful. Not in the language, besides its being hard in any non-lisp-like language, for the reasons mentioned for adding operators. On the other hand, there's no end to the features I wish I could copy from Python to other languages... -- http://mail.python.org/mailman/listinfo/python-list