thorwhalen / umpyre

Materials for python coaching
MIT License
1 stars 0 forks source link

Elegant ways to handle multi args in `map(lambda ...)` #33

Open thorwhalen opened 3 years ago

thorwhalen commented 3 years ago
startswith_dunder = lambda x: x.startswith('__')

def gen_attrname_func_for_module(module, name_filter=startswith_dunder):
    module_obj_names_that_are_particular_to_module = set(dir(module)) - set(dir(object))
    module_obj_names = filter(name_filter, module_obj_names_that_are_particular_to_module)
    for name in module_obj_names:
        func = getattr(module, name)
        if callable(func):
            yield name, func

Now I want to use something like lambda name, func: len(signature(func).parameters) == 1 in a filter. But getting my * crossed...

operator_name_funcs_1 = set(filter(lambda name, func: len(signature(func).parameters) == 1,
                                   *zip(*gen_attrname_func_for_module(operator))))
operator_name_funcs_2 = set(filter(lambda name, func: len(signature(func).parameters) == 2,
                                   *zip(*gen_attrname_func_for_module(operator))))