sum() shorthand

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
VoOu86
User
Beiträge: 1
Registriert: Samstag 11. Februar 2017, 18:56

sum() shorthand

Beitragvon VoOu86 » Samstag 11. Februar 2017, 19:03

Hey alle zusammen,

habe gerade angefangen Python zu lernen. Nun habe ich einen Code mit dem ich nichts anzufangen weiß bzw. ich weiß was er macht aber ich kann mir nicht erklären wie er ausgeschrieben wird.

Die Abkürzung für den Code ist:

Code: Alles auswählen

sum(pmi[term][tx] for tx in positive_vocab)


Kann mir eventuell jemand erklären wie er ausgeschrieben heißt?

Viele Dank!
Benutzeravatar
snafu
User
Beiträge: 5097
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: sum() shorthand

Beitragvon snafu » Samstag 11. Februar 2017, 19:09

VoOu86 hat geschrieben:Die Abkürzung für den Code ist:

Code: Alles auswählen

sum(pmi[term][tx] for tx in positive_vocab)


Kann mir eventuell jemand erklären wie er ausgeschrieben heißt?

  1. result = 0
  2. for tx in positive_vocab:
  3.     result += pmi[term][tx]
shcol (Repo | Doc | PyPi)
nezzcarth
User
Beiträge: 355
Registriert: Samstag 16. April 2011, 12:47

Re: sum() shorthand

Beitragvon nezzcarth » Samstag 11. Februar 2017, 19:12

Was du da hast, ist ein Generatorausdruck. Den kannst du relativ "wortgetreu" in eine for-Schleife umschreiben, brauchst dafür aber eine zusätzliche Variable, die zum aufsummieren verwendet wird; insgesamt sind das drei Zeilen.

Wie das geht, wird zum Beispiel hier erklärt:
https://docs.python.org/3/tutorial/data ... rehensions
https://docs.python.org/3/tutorial/clas ... xpressions

EDIT: snafu war schneller :(
Benutzeravatar
snafu
User
Beiträge: 5097
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: sum() shorthand

Beitragvon snafu » Samstag 11. Februar 2017, 19:25

Das Schema ist:
ausdruck1 for bezeichner in ausdruck2

ausdruck1 ist immer das, was bei einem Iterationsschritt ausgegeben wird. Dieser Teil rückt bei der "klassischen" Variante ans Ende. Im Prinzip also:
  1. for bezeichner in ausdruck2:
  2.     ausdruck1

Damit es wirklich ein Generator wird, müsste man es als Funktion schreiben und das Schlüsselwort yield verwenden, damit das Ergebnis des Ausdrucks mit jedem Iterationsschritt geliefert wird:
  1. def generator():
  2.     for bezeichner in ausdruck2:
  3.         yield ausdruck1

Und dies wird dann von sum() verarbeitet. Zum Testen kann man auch einfach mal eine Liste übergeben:
  1. print(sum([1, 2, 3]))

sum() erwartet an der Stelle einfach nur etwas, woraus es sich die Elemente ziehen kann und addiert diese.
shcol (Repo | Doc | PyPi)
nezzcarth
User
Beiträge: 355
Registriert: Samstag 16. April 2011, 12:47

Re: sum() shorthand

Beitragvon nezzcarth » Samstag 11. Februar 2017, 19:43

snafu hat geschrieben:Damit es wirklich ein Generator wird, müsste man es als Funktion schreiben und das Schlüsselwort yield verwenden, damit das Ergebnis des Ausdrucks mit jedem Iterationsschritt geliefert wird:

Meines Wissens sind Generatorausdrücke wie im Ausgangspost und die "Langversion" mit yield äquivalent. Für den Interpreter sind sie 'generator'en:

  1. In [1]: numbers = (i for i in range(100))
  2. In [2]: type(numbers)
  3. Out[2]: generator

Zurück zu „Allgemeine Fragen“

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot]