Как уже говорили другие, вы определяете add
неправильно, и оно должно return
вместо yield
.Также вы можете импортировать его:
from operator import add
Причина, по которой это не работает:
yield map(add, a1[i], a2[i])
Это потому, что map
работает со списками / итерациями, а не с отдельными значениями.Если add
были определены правильно, это может сработать:
yield map(add, [a[i]], [a2[i]])
Но на самом деле вы не должны этого делать, потому что это сложнее, чем должно быть без веской причины (как показывает ответ Свена Марнаха, ваш генераторфункция - это просто попытка реализовать map
, поэтому она не должна использовать map
, даже если это учебное упражнение).Наконец, если цель состоит в том, чтобы создать функцию, которая принимает функцию в качестве параметра, я бы не назвал параметр «добавить»;в противном случае, какой смысл вообще это делать?
def generator(f, a1, a2):
for x, y in zip(a1, a2):
yield f(x, y)
Говоря об этом, взгляните на zip
.