Add support for simple lambda type guard
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Feature
Consider the following code:
from typing import Optional, List
list_with_none: List[Optional[int]] = [None, 1, 2]
filtered = filter(lambda v: v is not None, list_with_none)
reveal_type(filtered)
# Revealed type is 'typing.Iterator[Union[builtins.int, None]]'
It would be nice if mypy was able to parse simple lambda functions like this one, and infer that filtered is typing.Iterator[builtins.int].
Note that in this example, we use a simple none check, but this could work with more complicated checks:
list_of_tuples: List[Tuple[Optional[int], Optional[int]]]
filter(lambda v: v[0] is not None and v[1] is not None, list_of_tuples)
# would become `Iterator[Tuple[int, int]]`
Pitch
This is a fairly common idiom in Python.
Reasons why mypy might now want to do this:
- Supporting simple lambda is ok, but there will inevitably be a limit to what mypy can support
- We could use https://www.python.org/dev/peps/pep-0647/ to achieve the same thing without using lambdas
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con i due esempi di filter/lambda e il riferimento a PEP 647; confronta i tipi rivelati richiesti e determina quali predicati semplici rientrano nell'ambito. Il lavoro è completato quando mypy inferisce Iterator[int] per l'esempio di controllo di None e Iterator[Tuple[int, int]] per il controllo appaiato, con copertura dei casi supportati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100