Cannot infer type of lambda when using default arguments
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
I get error: Cannot infer type of lambda even though the code seems fine to me.
Currently, I don't see any other workaround other than using # type: ignore.
To Reproduce
from typing import Callable, List
def foo(factories: List[Callable[[], int]]):
return sum(f() for f in factories)
names = ["0", "abc"]
# Inference works fine
assert foo([lambda: len(name) for name in names]) == 4
# Cannot infer type of lambda
assert foo([lambda name=name: len(name) for name in names]) == 4
def foo2(factories: List[Callable[[int], int]]):
return sum(f(0) for f in factories)
# Inference works fine
assert foo2([lambda i: len(name) for name in names]) == 4
# Cannot infer type of lambda
assert foo2([lambda i, name=name: len(name) for name in names]) == 4
Checked with:
mypy mypy-lambda-test.py
Expected Behavior
There should be no error. Especially because the other variants without default arguments are deemed fine.
Furthermore, using default arguments like this is the standard workaround to capture loop variables to lambdas.
Your Environment
- Mypy version used: 0.942
- Python version used: 3.9.7
- Operating system and version: Ubuntu 21.10
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 den Lambda-Beispielen in mypy-lambda-test.py und führe mypy mypy-lambda-test.py mit den angegebenen Python- und mypy-Versionen aus. Vergleiche die funktionierenden Lambdas mit den Varianten, die name über ein Standardargument erfassen. Als abgeschlossen gilt die Aufgabe, wenn alle vier Assertions eine Typprüfung bestehen, ohne # type: ignore zu erfordern.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100