def func1(val: List[object]):
if is_str_list(val):
- # Type of ``val`` is narrowed to List[str]
+ # Type of ``val`` is narrowed to ``List[str]``.
print(" ".join(val))
else:
- # Type of ``val`` remains as List[object]
+ # Type of ``val`` remains as ``List[object]``.
print("Not a list of strings!")
If ``is_str_list`` is a class or instance method, then the type in
wider form. The main reason is to allow for things like
narrowing ``List[object]`` to ``List[str]`` even though the latter
is not a subtype of the former, since ``List`` is invariant.
- The responsibility of
- writing type-safe type guards is left to the user. Even if
- the type guard function passes type checks, it may still fail at runtime.
- The type guard function may perform erroneous checks and return wrong
- booleans. Consequently, the type it promises in ``TypeGuard[TypeB]`` may
- not hold.
+ The responsibility of writing type-safe type guards is left to the user.
``TypeGuard`` also works with type variables. For more information, see
:pep:`647` (User-Defined Type Guards).
library/importlib.metadata,,`,loading the metadata for packages for the indicated ``context``.
library/re,,`,"`"
using/configure,84,:db2,=db1:db2:...
+library/typing,1004,`,# Type of ``val`` is narrowed to ``str``
+library/typing,1004,`,"# Else, type of ``val`` is narrowed to ``float``."
+library/typing,1004,`,# Type of ``val`` is narrowed to ``List[str]``.
+library/typing,1004,`,# Type of ``val`` remains as ``List[object]``.