Une liste en compréhension construit toute la liste en mémoire immédiatement ; une expression génératrice renvoie un itérateur paresseux qui produit les éléments un à un au fur et à mesure de la consommation. Les générateurs utilisent une mémoire constante et peuvent commencer à produire avant que la source soit épuisée, mais vous ne pouvez les parcourir qu'une fois, et vous ne pouvez ni les indexer ni en prendre la longueur.
Pourquoi les recruteurs posent cette question
Cela ressemble à de l'anecdote syntaxique, mais c'est en réalité une question de conscience mémoire. Les recruteurs s'en servent pour voir si vous pensez à la taille de vos données avant d'écrire un one-liner, et si vous connaissez le compromis que vous faites en échangeant des crochets contre des parenthèses. La limite du parcours unique est la partie que les candidats oublient, et elle provoque de vrais bugs quand quelqu'un itère deux fois le même générateur et n'obtient silencieusement rien.
Comment structurer votre réponse
- Opposez évaluation immédiate et paresseuse en une ligne.
- Donnez la conséquence sur la mémoire.
- Nommez ce que les générateurs ne savent pas faire.
- Dites lequel vous prenez par défaut et pourquoi.
Exemple de réponse
Les crochets me donnent une liste entièrement matérialisée avant que la ligne suivante s'exécute, alors que les parenthèses me donnent un générateur qui calcule chaque élément à la demande. Pour quelques centaines d'éléments la différence est du bruit, donc je prends une liste parce que c'est plus facile à déboguer et que je peux la regarder deux fois. Dès que la source est un fichier, un curseur de base de données ou une API paginée, je passe au générateur. Sur un job de rapprochement sur lequel j'ai travaillé, charger un gros export dans une liste poussait le conteneur au-delà de sa limite mémoire et il se faisait tuer en boucle, et changer une paire de crochets en parenthèses a fait tomber le pic de mémoire à quelques mégaoctets parce que nous ne gardions jamais qu'une ligne. Le piège, c'est qu'un générateur est épuisé après un passage. J'ai vu quelqu'un logguer le nombre d'éléments d'un générateur puis boucler dessus, et le corps de la boucle ne s'est jamais exécuté. Si j'ai besoin des données plus d'une fois, je les matérialise délibérément et j'assume la mémoire.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Que change l'opérateur morse dans une compréhension ?
- Comment chaîneriez-vous plusieurs générateurs ?
- Quand un ensemble en compréhension a-t-il plus de sens ?
Autres questions pour Développeur Python
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions