Method call on imported definition differs inside of a list comprehension
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
import re
[x for x in [] if re.match(".*", x)]
vs:
import re
re.match(".*", x)
When you disassemble these you'll see the inlined one will be doing a LOAD_ATTR 3 (match + NULL|self) while the one outside of the comprehension will be doing a PUSH_NULL/CALL which is to disable the method call optimization on things which are likely not methods.
These should both have the same byte code. There's no perceivable code execution difference other than performance though.
CPython versions tested on:
3.12, CPython main branch
Operating systems tested on:
Linux
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par désassembler les deux exemples Python du rapport sur CPython 3.12 ou main, puis retracez la manière dont sont compilés les chemins d’appel de la compréhension de liste et de l’appel au niveau supérieur. Le travail est terminé lorsque les deux formes utilisent un bytecode cohérent pour l’appel de la définition importée, sans modifier le comportement observable.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 42/100