On 3/10/2013 11:18 AM, Steven D'Aprano wrote:
On Sun, 10 Mar 2013 14:16:27 +0000, Joseph L. Casale wrote:I have a switch statement composed using a dict: switch = { 'a': func_a, 'b': func_b, 'c': func_c } switch.get(var, default)() As a result of multiple functions per choice, it migrated to: switch = { 'a': (func_a1, func_a2), 'b': (func_b1, func_b2), 'c': (func_c, ) } for f in switch.get(var, (default, )): f() As a result of only some of the functions now requiring unique arguments, I presume this needs to be migrated to a if/else statement? Is there a way to maintain the switch style with the ability in this scenario to cleanly pass args only to some functions?The dict-as-switch-statement pattern only works when the functions all take the same argument(s). Otherwise, you need to check which function you are calling, and provide the right arguments.
If, for instance, the functions take either 0 or 1 arg and the 1 arg is always the same, an alternative to the other suggestions is to look at the signature in an if statement. In 3.3 this is relatively ease, as inspect.signature(func) returns a signature object. There are more complicated paths in earlier versions.
-- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
