[Python-3000] AST access (WAS: Adaptation vs. Generic Functions) (original) (raw)

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: @pprintwhen(isinstance(ob,list) and len(ob)<10) def pprintshortlist(ob): ... And the database query use case could be done using something like: db.query((row for row in sometable 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