Add support for simple lambda type guard
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
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
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 les deux exemples de filter/lambda et la référence à PEP 647 ; comparez les types révélés demandés et déterminez quels prédicats simples sont concernés. C’est terminé lorsque mypy déduit Iterator[int] pour l’exemple de vérification de None et Iterator[Tuple[int, int]] pour la vérification par paires, avec une couverture des cas pris en charge.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100