DEV Community


Posted on

What does the "yield" keyword do in Python and Javascript?

The "yield" keyword in both Python and Javascript plays a key role in working with generators, but with some subtle differences:


Function creation: yield is used to create generator functions, which are functions that can pause and resume their execution multiple times, yielding values each time they resume. This allows for memory-efficient iteration over large datasets or lazy evaluation of expressions.
Pausing and resuming: Within a generator function, yield pauses execution and returns a value to the caller. The function can then resume execution when the caller requests the next value using an iterator interface.

def fibonacci(n):
  a, b = 0, 1
  for _ in range(n):
    yield a
    a, b = b, a + b

# Use the generator with a for loop
for num in fibonacci(10):
Enter fullscreen mode Exit fullscreen mode

This code generates the first 10 Fibonacci numbers without storing them all in memory at once.


Async iteration: yield is used with the async and await keywords to pause and resume execution in asynchronous code. It allows for iterating over asynchronous operations one by one, similar to a regular loop.
Returning values: Similar to Python, yield within an async generator function returns a value to the caller. However, it doesn't pause execution; instead, it signals that the next value is ready when the caller resumes.

async function fetchUserRepos(username) {
  const response = await fetch(`${username}/repos`);
  const repos = await response.json();

  for (const repo of repos) {

(async () => {
  const repoNames = [];
  for await (const name of fetchUserRepos('<insert_userName_here>')) {
  console.log(repoNames); // Prints all repository names
Enter fullscreen mode Exit fullscreen mode

This code fetches a user's repositories from Github and iterates over them one by one, waiting for each repository to be fetched before proceeding.

Key differences:

Feature Python Javascript
Execution Synchronous Asynchronous
Value consumption for loop or iterators next() method
Generator completion return statement or end of function return statement or end of function


In Python, yield is primarily used for memory-efficient iteration and lazy evaluation. In Javascript, it's used for asynchronous iteration and managing control flow in async functions.


Python's yield pauses execution completely, while Javascript's yield only signals that a value is ready for the caller.

I hope this clarifies the role of yield in both Python and Javascript. Feel free to ask if you have further questions!


Top comments (0)