Как передать функцию в качестве аргумента и вызвать её с передачей параметров?

Как можно написать метод, который будет принимать функцию, передавать ей параметры и выполнять ее, чтобы реализовать цикл map?
  • 14 февраля 2024 г. 18:28
Ответы на вопрос 3
Для передачи функции в качестве аргумента и вызова её с передачей параметров в Python, можно использовать концепцию "функции высшего порядка". Вот пример:

```python
def my_function(arg1, arg2):
    return arg1 + arg2

def execute_function(func, arg1, arg2):
    result = func(arg1, arg2)
    return result

result = execute_function(my_function, 2, 3)
print(result)  # Вывод: 5
```

В данном примере, `my_function` - это функция, которую мы передаем в качестве аргумента `func` в `execute_function`. Затем, мы вызываем `func` с передачей аргументов `arg1` и `arg2`.

Для реализации цикла map, можно написать метод, который будет принимать список и функцию, и затем применять эту функцию к каждому элементу списка. Вот пример:

```python
def my_map(func, lst):
    result = []
    for item in lst:
        transformed_item = func(item)
        result.append(transformed_item)
    return result

def double(x):
    return x * 2

my_list = [1, 2, 3, 4, 5]
mapped_list = my_map(double, my_list)
print(mapped_list)  # Вывод: [2, 4, 6, 8, 10]
```

В данном примере, `my_map` принимает функцию `func` и список `lst`. Он проходит по каждому элементу списка, применяет функцию `func` к каждому элементу и добавляет результат в новый список `result`. Функция `double` принимает число и возвращает его удвоенное значение. Наконец, через вызов `my_map(double, my_list)` мы получаем список, в котором каждый элемент списка `my_list` удвоен.
Самый простейший пример. <br/> Модифицируйте его если нужны ссылки на аргументы <br/> <br/> <pre><code class="cpp">#include &lt;functional&gt;
#include &lt;iostream&gt;

template &lt;typename Func, typename ... Args&gt;
void foo(Func func, Args ... args) {
    func(args...);
}

int main() {
    foo([](){ std::cout &lt;&lt; "endl;" &lt;&lt; std::endl; });
    foo([](int i){ std::cout &lt;&lt; "int i: " &lt;&lt; i &lt;&lt; std::endl; }, 123);
}</code></pre>
Вот два простых примера как это можно сделать: <br/> <pre><code class="cpp">#include &lt;iostream&gt;
#include &lt;functional&gt;

void f(const std::string&amp; str) {
    std::cout &lt;&lt; str;
}

void foo(void (*f)(const std::string&amp;), const std::string&amp; str) {
    f(str);
}

void Foo(std::function&lt;void(const std::string&amp;)&gt; F, const std::string&amp; str) {
    F(str);
}


int main() {
    foo(f, "Hello");
    Foo(f, " world");
    return 0;
}</code></pre> <br/> <br/> <code>foo</code> пример без использования STL <br/> <code>Foo</code> пример с использованием STL <br/> <br/> Но возможно, если ты планируешь передавать функции с разными аргументами и их количествами, то можно попробовать сделать через какой-нибудь <code>std::initializer_list</code> , но таким образом и все функции тоже нужно переделать чтобы они принимали этот тип.
Похожие вопросы