Can global variable be passed into Python function?

Marko Rauhamaa marko at pacujo.net
Fri Feb 28 14:20:52 EST 2014


Chris Angelico <rosuav at gmail.com>:
> On Sat, Mar 1, 2014 at 5:53 AM, Marko Rauhamaa <marko at pacujo.net> wrote:
>> A dict dispatch table is just awful.
>> Really? How is that? I've used them, often. Yes, there are times when
> I could express something more cleanly with a C-style switch
> statement, but other times the dispatch table is fundamentally
> cleaner. I shared an example a few posts ago in this thread; care to
> elaborate on how it's "just awful"?

Your example:
 compare_key = {
 # Same target(s).
 ast.Assign: lambda node: ' '.join(dump(t) for t in node.targets),
 # Same target and same operator.
 ast.AugAssign: lambda node: dump(node.target) + dump(node.op) + "=",
 # A return statement is always compatible with another.
 ast.Return: lambda node: "(easy)",
 # Calling these never compatible is wrong. Calling them
 # always compatible will give lots of false positives.
 ast.Expr: lambda node: "(maybe)",
 # These ones are never compatible, so return some
 # object that's never equal to anything.
 ast.Import: lambda node: float("nan"),
 ast.ImportFrom: lambda node: float("nan"),
 ast.Pass: lambda node: float("nan"),
 ast.Raise: lambda node: float("nan"),
 ast.If: lambda node: float("nan"),
 }
vs (my proposal):
 with key from ast:
 if Assign:
 return ' '.join(dump(t) for t in node.targets)
 elif AugAssign:
 # Same target and same operator.
 return dump(node.target) + dump(node.op) + "="
 elif Return:
 # A return statement is always compatible with another.
 return "(easy)"
 elif Expr:
 # Calling these never compatible is wrong. Calling them
 # always compatible will give lots of false positives.
 return "(maybe)"
 else:
 # These ones are never compatible, so return some
 # object that's never equal to anything.
 return float("nan")
Which do *you* find more readable?
Marko


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /