[Python-3000] AST access (WAS: Adaptation vs. Generic Functions)
Blake Winton
bwinton at latte.ca
Tue Apr 11 01:39:15 CEST 2006
Phillip J. Eby wrote:
> I tried doing something like this when I was writing RuleDispatch, and gave
> up in disgust because there's no sane way to implement "and" and "or"
> operations with this approach. The bitwise operators (&, |, and ~) bind
> too tightly to be used with comparison expressions, so doing something like
> "x>y & z" would mean "x>(y&z)" instead of "(x>y)&z".
How would symbols, or ast access have helped you with that problem?
Would you really go around manually mangling the parse tree to move the
"&" higher in the branches somehow?
> So if you could backquote code to make an AST literal, you could spell
> RuleDispatch overrides like:
> @pprint_when(`isinstance(ob,list) and len(ob)<10`)
> def pprint_short_list(ob):
> ...
> And the database query use case could be done using something like:
> db.query(`(row for row in some_table if row.x>42)`)"
>
> Perhaps the backquote isn't the right character for this;
What do you think about the oft-maligned curly brace?
@pprint_when({isinstance(ob,list) and len(ob)<10})
def pprint_short_list(ob):
db.query( {(row for row in some_table if row.x>42)} )
? Not too heinous, in my view.
And it should be possible to tell the difference between it and a dict
with a bit of a lookahead... (Really it's the conflict with dict
initialization that I expect to kill this proposal.)
Later,
Blake.
More information about the Python-3000
mailing list