Weird `inspect.getsource` behavior with generators
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
If you return two generators (one from a generator function and one a generator expression) from a function and use getsource on each, you get the code for the generator function for both.
def get_2_generators():
def my_generator_1():
for x in range(5):
yield x*2
my_generator_2 = (x*3 for x in range(6))
return my_generator_1(), my_generator_2
g1, g2 = get_2_generators()
getsource(g1.gi_code)
>>>' def my_generator_1():\n for x in range(5):\n yield x*2 \n'
getsource(g2.gi_code)
>>>' def my_generator_1():\n for x in range(5):\n yield x*2 \n'
Further, presumably not a bug but a current limitation, in general using getsource on generator-expression objects returns the code of the function they were created in, rather than the code of the generator expression itself, which can make things confusing when there are multiple such expressions, e.g.:
def get_2_generators():
my_generator_1 = (x*2 for x in range(5))
my_generator_2 = (x*3 for x in range(6))
return my_generator_1, my_generator_2
g1, g2 = get_2_generators()
getsource(g1.gi_code)
>>>'def get_2_generators():\n my_generator_1 = (x*2 for x in range(5)) \n my_generator_2 = (x*3 for x in range(6))\n return my_generator_1, my_generator_2\n'
getsource(g2.gi_code)
>>>'def get_2_generators():\n my_generator_1 = (x*2 for x in range(5)) \n my_generator_2 = (x*3 for x in range(6))\n return my_generator_1, my_generator_2\n'
Can we fix both of the above by making getsource return the code of the generator expression itself?
CPython versions tested on:
3.12
Operating systems tested on:
Windows
Linked PRs
- gh-121933
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit inspect.getsource und den generator gi_code-Beispielen im Bericht und prüfe anschließend den verlinkten PR gh-121933 auf die aktuelle Richtung. Vergleiche Fälle von Generatorfunktionen und Generatorausdrücken und verifiziere, dass die abgeschlossene Arbeit mehrere Generatoren unterscheidet, statt nicht zusammengehörigen einschließenden Quelltext zurückzugeben.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- developer-experience
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100