Python-Generator-Verständnis

Zeeshan Afridi 21 Juni 2023
  1. Generatoren in Python
  2. Python-Generator-Verständnis
Python-Generator-Verständnis

Generator Comprehension ist eine intelligente und effiziente Möglichkeit, Generatoren in Python zu erstellen. Es ist eine einzeilige Spezifikation zum Definieren eines Generators, der zum Verstehen dieser Syntax zum effizienten Codieren unerlässlich ist.

In diesem Artikel lernen wir die Generatoren und das Generatorverständnis von Python zusammen mit Beispielen kennen.

Generatoren in Python

Generatoren in Python sind Funktionen, die ein iterierbares oder durchlaufendes Objekt zurückgeben, das zum Erstellen von Iteratoren verwendet wird, die die Elemente gleichzeitig durchlaufen. Der Generator ist eine einfache und einfache Möglichkeit, Iteratoren mit den vordefinierten Funktionen iter() und next() zu erstellen, um die internen Zustände zu verfolgen, und kümmert sich auch um die Ausnahme StopInteration.

Während das Erstellen von Iterationen in Python sehr komplex ist, müssen Sie die Funktionen iter() und next() definieren und implementieren. Das ist ein langwieriger Prozess, aber dank Generatoren.

Sehen wir uns ein Beispiel für Generatoren in Python an.

# A simple generator function
def my_gen():
    n = 1
    print(f"This is line number {n}")
    # generator function always contains the 'yield' Keyword
    yield n

    n += 1
    print(f"This is line number {n}")
    yield n

    n += 1
    print(f"This is line number {n}")
    yield n


print(my_gen())

Ausgang:

<generator object my_gen at 0x00000150EA43E448>

Wir haben das yield in der obigen Funktion verwendet, um die Werte in einen Generator umzuwandeln. Als wir die Funktion my_gen() gedruckt haben, haben wir das Objekt der Funktion erhalten, das verwendet werden kann, um über den Generator zu iterieren.

Sehen wir uns ein Beispiel an, um den Generator zu durchlaufen.

def even_nums():

    # create generator
    for i in range(11):
        if i % 2 == 0:
            yield i


print("This is the generator object of the generator function:", even_nums())

# iterate over the generator function
print("\nEven number from 0 to 11")
for i in even_nums():
    print(i, end=", ")

Ausgang:

This is the generator object of the generator function: <generator object even_nums at 0x05ACC2D0>

Even number from 0 to 11
0, 2, 4, 6, 8, 10,

Python-Generator-Verständnis

Das Generatorverständnis ähnelt dem Listenverständnis in Python; Klammern und eckige Klammern unterscheiden sie jedoch. Mithilfe des Generatorverständnisses in Python können wir leicht einen einfachen Generator erstellen, der ähnlich wie die Lambda-Funktionen funktioniert, die anonyme Funktionen erstellen.

Der Unterschied zwischen Generatorverständnis und Listenverständnis besteht darin, dass das Generatorverständnis ein Element gleichzeitig erstellt, während das Listenverständnis die gesamte Liste gleichzeitig erstellt. Das Generatorverständnis ist viel schneller und speichereffizienter.

Sehen wir uns ein Beispiel für das Generatorverständnis in Python an.

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x ** 2 for x in range(1, 6))

print(gen)  # return --> generator object

# iterate over the generator 'gen'
for i in gen:
    print(i, end=", ")

Ausgang:

<generator object <genexpr> at 0x00000150EA43EC48>
1, 4, 9, 16, 25,

Im obigen Codebeispiel hat der Generatorausdruck die erforderlichen Ergebnisse bei Bedarf, aber nicht sofort erzeugt. Es gab das Objekt des Generators zurück, das wir später verwendet haben, um den Generator mit einer for-Schleife zu durchlaufen.

Mit der Funktion next() können Sie jeden Wert des Generators sequentiell drucken, da sich der Generator um die Reihenfolge und den Zustand der Werte kümmert.

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x ** 2 for x in range(1, 6))

# next()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

Ausgang:

1
4
9
16
25

Wie Sie sehen können, erhalten wir den On-Demand-Wert mit next(), und es kümmert sich um die Reihenfolge der Werte, da ich den nächsten Wert nach jeder next()-Funktion erhalte.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Verwandter Artikel - Python Generator