On Fri, Nov 05, 2021 at 03:53:56AM -0700, one last Day wrote:

> Call two or more functions with one args.
[...]

This is like a version of map() except that instead of calling one 
function with a bunch of arguments, it calls many arguments with one set 
of arguments. It seems to be related to the "apply()" functional 
programming function too.

I haven't been able to find a standard name for this functional 
programming idiom, but it does seem to be a moderately common thing.

In Clojure:

https://stackoverflow.com/questions/67007139/how-do-i-run-multiple-functions-which-operate-on-the-same-collection-but-only-t

Python:

https://stackoverflow.com/questions/35858735/apply-multiple-functions-with-map

Apply multiple functions to the same argument in functional Python:

https://www.py4u.net/discuss/203479


I think the simplest eager implementation would be:

    def apply(functions, *args, **kwargs):
        results = [None]*len(functions)
        for i, f in enumerate(functions):
            results[i] = f(*args, **kwargs)
        return results

If the functions have no side-effects, this could be done in parallel, 
using threads, async, or process. Otherwise, it can be turned into a 
list comprehension:


    [f(*args, **kwargs) for f in functions]

If the arguments include an iterator, then the first function call will 
consume the iterator. For example:

    # Works as expected
    >>> from math import prod
    >>> data = [1, 2, 3, 4]
    >>> [f(data, start=100) for f in (sum, prod)]
    [110, 2400]

    # Surprise!
    >>> data = iter([1, 2, 3, 4])
    >>> [f(data, start=100) for f in (sum, prod)]
    [110, 100]

So an iterator version would need to be written differently.

-- 
Steve
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/PFAF7BA5K7K3KWAOTQ6P46IU7FXLWSRF/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to