Generatorausdrücke in Python (Generatorausdrücke in Python), Lektion, Seite 724027
https://www.purl.org/stefan_ram/pub/beschreibungen_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Generatorausdrücke in Python 

Ein Generatorausdruck beschreibt ein Iterables mit Hilfe einer Bildungsvorschrift  (Bildungsregel, comprehension, Komprehension, ).

Syntax von Gneratorausdrücken

generator_expression ::= "(" expression comp_for ")"

comprehension ::= expression comp_for

comp_for ::= ["async"] "for" target_list "in" or_test [comp_iter]

comp_iter ::= comp_for | comp_if

comp_if ::= "if" expression_nocond [comp_iter]

Die ungewohnte Syntax kann man sich zunächst vereinfacht  so merken:

Eine Bildungsvorschrift besteht aus einem Ausdruck, einer for-Spezifikation und einer optionalen if-Spezifikation.

Die gebildeten Werte bestehen aus den Werten des Ausdrucks für alle von der for-Spezifikation erzeugten Werte der for-Variablen, welche die if-Spezifikation erfüllen.

Konsolenprotokoll

k = \
( f'"{chr(i)}"'
for i in range( 65, 65+26 )
if chr( i )not in "AEIOU" )

print( ", ".join( k ))

"B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z"

print( ", ".join( k ))

Jeder Generator ist ein Iterator, kein Iterables.

Da Generatoren verbraucht werden können, wird davon abgeraten, sie in Variablen zu halten, und empfohlen Ausdrücke, welche bei jeder Auswertung einen neuen Generator erzeugen, zu verwenden.

Konsolenprotokoll

g =( i**2 for i in range( 9 ) if i % 2 )

print( next( g ))

1
print( next( g ))
9
print( next( g ))
25
print( next( g ))
49
print( next( g ))

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

StopIteration

type( g )
<class 'generator'>
Beispiel

k =( i for i in range( 3, 5 ) )

sum( k )

7
Beispiel

from operator import add

k =( i for i in range( 3, 5 ))

add( *k )

7
Beispiel
min( i for i in range( 3 ))
0
Beispiel
max( i for i in range( 3 ))
2
Beispiel
sum( i for i in range( 3, 5 ))
7
Beispiel
print( *( x**2    for x in range( 1, 5 )))
1 4 9 16
Beispiel
[ d    for d in dir( [] )    if '__' not in d ]
['append', 'clear', 'copy', ]
Beispiel
bytes( c for c in range( 65, 69 ))
b'ABCD'
Beispiel

import random

import string

print( ''.join( random.choice( string.ascii_letters )for i in range( 8 )))

enAfqETk
print( ''.join( random.choice( string.ascii_letters )* 8 ))
TTTTTTTT

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724027 stefan_ram:724027 Generatorausdrücke in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724027, slrprddef724027, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/beschreibungen_python