Project Euler #2: sum of even Fibonacci numbers, using generators
It's weird that the fibonacci() generates a sequence that starts with 1, 2, 3, 5, 8, ….  Conventionally, the Fibonacci sequence starts with either 0, 1, 1, 2, 3, 5, 8, … or 1, 1, 2, 3, 5, 8, ….

A purer approach would be to use [itertools.takewhile()] in conjunction with an infinite generator.

You should also take advantage of parallel assignment.

The fibonacci() generator would look like this:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b


filter_even() is fine.  You could also just write a generator expression instead.

from itertools import takewhile

print(sum(n for n in takewhile(lambda n: n &lt; 4000000, fibonacci()) if n % 2 == 0))