-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
featurepriority-2-lowtopic-type-narrowingConditional type narrowing / binderConditional type narrowing / bindertopic-typeguard-typeisTypeGuard / TypeIs / PEP 647 / PEP 742TypeGuard / TypeIs / PEP 647 / PEP 742
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
Metadata
Metadata
Assignees
Labels
featurepriority-2-lowtopic-type-narrowingConditional type narrowing / binderConditional type narrowing / bindertopic-typeguard-typeisTypeGuard / TypeIs / PEP 647 / PEP 742TypeGuard / TypeIs / PEP 647 / PEP 742