Interviewfrage für Python-Entwickler

Was ist der Unterschied zwischen einer List Comprehension und einem Generator Expression?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Eine List Comprehension baut die komplette Liste sofort im Speicher auf; ein Generator Expression gibt dir einen lazy Iterator zurück, der Elemente einzeln produziert, während du sie konsumierst. Generatoren brauchen konstanten Speicher und können liefern, bevor die Quelle erschöpft ist, aber du kannst sie nur einmal durchlaufen, nicht indizieren und ihre Länge nicht abfragen.

Warum Interviewer das fragen

Es sieht nach Syntax-Trivia aus, geht aber in Wahrheit um Speicherbewusstsein. Interviewer sehen damit, ob du über die Größe deiner Daten nachdenkst, bevor du einen Einzeiler schreibst, und ob du weißt, welchen Handel du eingehst, wenn du eckige gegen runde Klammern tauschst. Die Einmal-Durchlauf-Beschränkung ist der Teil, den Kandidaten vergessen, und sie verursacht echte Bugs, wenn jemand denselben Generator zweimal durchläuft und still nichts bekommt.

So baust du deine Antwort auf

  • Sag eager gegen lazy in einer Zeile.
  • Nenn die Konsequenz für den Speicher.
  • Nenn, was Generatoren nicht können.
  • Sag, was dein Default ist und warum.

Beispielantwort

Gesprochenes Beispiel, erste Person

Eckige Klammern geben mir eine Liste, die vollständig materialisiert ist, bevor die nächste Zeile läuft, runde Klammern geben mir einen Generator, der jedes Element auf Abruf berechnet. Bei ein paar hundert Elementen ist der Unterschied Rauschen, also nehme ich eine Liste, weil sie leichter zu debuggen ist und ich zweimal reinschauen kann. Sobald die Quelle eine Datei, ein Datenbank-Cursor oder ein API-Paginator ist, wechsle ich zum Generator. In einem Abgleichjob, an dem ich gearbeitet habe, hat das Einlesen eines großen Exports in eine Liste den Container über sein Speicherlimit gedrückt und er wurde immer wieder gekillt, und der Tausch eines Klammerpaars hat den Peak-Speicher auf ein paar Megabyte gesenkt, weil wir immer nur eine Zeile gehalten haben. Der Haken ist, dass ein Generator nach einem Durchlauf erschöpft ist. Ich habe zugesehen, wie jemand die Anzahl eines Generators geloggt und danach darüber iteriert hat, und der Schleifenkörper lief nie. Wenn ich die Daten mehr als einmal brauche, materialisiere ich sie bewusst und nehme den Speicher in Kauf.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Was ändert der Walross-Operator in einer Comprehension?
  • Wie würdest du mehrere Generatoren hintereinanderhängen?
  • Wann ergibt eine Set Comprehension mehr Sinn?

Weitere Fragen für Python-Entwickler

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen