As i said, f() returns a generator object in this case. So you're calling list on a generator that yields None once, the result of which is a list that contains None. If you change the `yield` to `yield "foobar"`, list(f()) will get you `["foobar"]`.
Edit: Perhaps, to clear things up more, about where the value 7 went- your snippet can be expressed without using lambdas as
I'm thinking that the parent is expecting 'yield' to return 'None' into g(), and then for g() to return 7 since it doesn't do anything with the 'x' parameter, and is confused why that isn't the case.
Yes, but I think this is cleared up if you consider that calling a generator function does not execute its body, but return generator object. It doesn't really matter if it's a lambda or a regular named function.
Edit: Perhaps, to clear things up more, about where the value 7 went- your snippet can be expressed without using lambdas as
Note that there's no return before g(v) because generators (at least in 2.7) can only yield, not return a value.