Generating sequences with Python yield keyword
Jul 16, 2025 am 04:50 AMThe yield keyword is used to create generators, generate values on demand, and save memory. 1. Replace return to generate finite sequences, such as Fibonacci sequences; 2. Implement infinite sequences, such as natural sequences; 3. Process big data or file readings, and process them line by line to avoid memory overflow; 4. Note that the generator can only traverse once, and can be called by next() or for loop.
If you want to know how to use Python's yield
keyword to generate sequences, its biggest function is to help you create a generator to generate values as needed when needed, rather than store all data in memory at once.

This is especially useful when dealing with large amounts of data or infinite sequences.
Let’s take a look at several common usage scenarios and writing methods.

Create a simple numerical sequence with yield
The most common way is return
a sequence instead. The difference is that when a function encounters yield
, it will pause execution and retain the current state, and then continue to execute after the next call.
For example, you want to write a function that generates a Fibonacci sequence:

def fib_sequence(n): a, b = 0, 1 while a < n: yield a a, b = b, ab
This way you can get the value step by step like this:
for num in fib_sequence(100): print(num)
This method is much more memory-saving than creating a complete list, especially when you only need to iterate over iterate.
yield implements an infinite sequence generator
Sometimes you may want to generate an "infinite" sequence, such as a natural sequence that starts with 1 and is added to 1. In this case, it will definitely not work if you use a normal list, but it is easy to use yield
.
For example:
def infinite_numbers(): num = 1 While True: yield num num = 1
You can take the first few numbers like this:
counter = infinite_numbers() print(next(counter)) # 1 print(next(counter)) # 2
Of course, when using it in actual use, you should pay attention to controlling the number of cycles, otherwise it will enter a dead cycle.
yield handles big data or file reading
In addition to mathematical sequences, yield
is also useful when dealing with large files or data streams. For example, if you read a log file of several GB, it is obviously inappropriate to load it into memory at one time, you can use the generator to read it line by line.
Example:
def read_large_file(file_path): with open(file_path, 'r') as f: for line in f: yield line.strip()
In this way, you only read one line at a time and will not take up too many resources:
for log_line in read_large_file('huge_log.txt'): process(log_line) # Assume this is your processing logic
This method is very practical when doing data analysis, ETL or log processing.
A few tips: Where yield is easy to ignore when using
- The yield function returns a generator object , not a direct result, and needs to be triggered with
next()
orfor
loop. - The generator can only be traversed once, and you have to call the function again to create a new object.
- If you want to get all the results from the generator, you can convert it into a list:
list(my_generator())
- yield can be used with the send() method to achieve bidirectional communication, but this is an advanced usage and is generally not commonly used.
Basically that's it. Using yield
well can make your code more efficient and elegant, especially when dealing with sequences, streaming data or large data sets.
The above is the detailed content of Generating sequences with Python yield keyword. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

std::chrono is used in C to process time, including obtaining the current time, measuring execution time, operation time point and duration, and formatting analysis time. 1. Use std::chrono::system_clock::now() to obtain the current time, which can be converted into a readable string, but the system clock may not be monotonous; 2. Use std::chrono::steady_clock to measure the execution time to ensure monotony, and convert it into milliseconds, seconds and other units through duration_cast; 3. Time point (time_point) and duration (duration) can be interoperable, but attention should be paid to unit compatibility and clock epoch (epoch)

ToaccessenvironmentvariablesinPHP,usegetenv()orthe$_ENVsuperglobal.1.getenv('VAR_NAME')retrievesaspecificvariable.2.$_ENV['VAR_NAME']accessesvariablesifvariables_orderinphp.iniincludes"E".SetvariablesviaCLIwithVAR=valuephpscript.php,inApach

HashMap implements key-value pair storage through hash tables in Java, and its core lies in quickly positioning data locations. 1. First use the hashCode() method of the key to generate a hash value and convert it into an array index through bit operations; 2. Different objects may generate the same hash value, resulting in conflicts. At this time, the node is mounted in the form of a linked list. After JDK8, the linked list is too long (default length 8) and it will be converted to a red and black tree to improve efficiency; 3. When using a custom class as a key, the equals() and hashCode() methods must be rewritten; 4. HashMap dynamically expands capacity. When the number of elements exceeds the capacity and multiplies by the load factor (default 0.75), expand and rehash; 5. HashMap is not thread-safe, and Concu should be used in multithreaded

PHPhasthreecommentstyles://,#forsingle-lineand/.../formulti-line.Usecommentstoexplainwhycodeexists,notwhatitdoes.MarkTODO/FIXMEitemsanddisablecodetemporarilyduringdebugging.Avoidover-commentingsimplelogic.Writeconcise,grammaticallycorrectcommentsandu

When using PHP preprocessing statements to execute queries with IN clauses, 1. Dynamically generate placeholders according to the length of the array; 2. When using PDO, you can directly pass in the array, and use array_values to ensure continuous indexes; 3. When using mysqli, you need to construct type strings and bind parameters, pay attention to the way of expanding the array and version compatibility; 4. Avoid splicing SQL, processing empty arrays, and ensuring data types match. The specific method is: first use implode and array_fill to generate placeholders, and then bind parameters according to the extended characteristics to safely execute IN queries.

In PHP, you can use a variety of methods to determine whether a string starts with a specific string: 1. Use strncmp() to compare the first n characters. If 0 is returned, the beginning matches and is not case sensitive; 2. Use strpos() to check whether the substring position is 0, which is case sensitive. Stripos() can be used instead to achieve case insensitive; 3. You can encapsulate the startsWith() or str_starts_with() function to improve reusability; in addition, it is necessary to note that empty strings return true by default, encoding compatibility and performance differences, strncmp() is usually more efficient.

There are three key ways to avoid the "undefinedindex" error: First, use isset() to check whether the array key exists and ensure that the value is not null, which is suitable for most common scenarios; second, use array_key_exists() to only determine whether the key exists, which is suitable for situations where the key does not exist and the value is null; finally, use the empty merge operator?? (PHP7) to concisely set the default value, which is recommended for modern PHP projects, and pay attention to the spelling of form field names, use extract() carefully, and check the array is not empty before traversing to further avoid risks.

Create and use SimpleDateFormat requires passing in format strings, such as newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); 2. Pay attention to case sensitivity and avoid misuse of mixed single-letter formats and YYYY and DD; 3. SimpleDateFormat is not thread-safe. In a multi-thread environment, you should create a new instance or use ThreadLocal every time; 4. When parsing a string using the parse method, you need to catch ParseException, and note that the result does not contain time zone information; 5. It is recommended to use DateTimeFormatter and Lo
