DEV Community

Danyson
Danyson

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:

Python:

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):
  print(num)
Enter fullscreen mode Exit fullscreen mode

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

Javascript:

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(`https://api.github.com/users/${username}/repos`);
  const repos = await response.json();

  for (const repo of repos) {
    yield repo.name;
  }
}

(async () => {
  const repoNames = [];
  for await (const name of fetchUserRepos('<insert_userName_here>')) {
    repoNames.push(name);
  }
  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

Purpose:

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.

Execution:

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!

Website: https://danyson.netlify.app/
LinkedIn: https://www.linkedin.com/in/danyson/

Top comments (0)