Как можно написать метод, который будет принимать функцию, передавать ей параметры и выполнять ее, чтобы реализовать цикл map?
Для передачи функции в качестве аргумента и вызова её с передачей параметров в 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 <functional>
#include <iostream>
template <typename Func, typename ... Args>
void foo(Func func, Args ... args) {
func(args...);
}
int main() {
foo([](){ std::cout << "endl;" << std::endl; });
foo([](int i){ std::cout << "int i: " << i << std::endl; }, 123);
}</code></pre>
Вот два простых примера как это можно сделать: <br/> <pre><code class="cpp">#include <iostream>
#include <functional>
void f(const std::string& str) {
std::cout << str;
}
void foo(void (*f)(const std::string&), const std::string& str) {
f(str);
}
void Foo(std::function<void(const std::string&)> F, const std::string& 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> , но таким образом и все функции тоже нужно переделать чтобы они принимали этот тип.