covariance v. contravariance in Callable

This commit is contained in:
Luciano Ramalho 2022-04-01 17:23:12 -03:00
parent 646427f393
commit 434f8d26b6
1 changed files with 22 additions and 0 deletions

View File

@ -0,0 +1,22 @@
from collections.abc import Callable
def update( # <1>
probe: Callable[[], float], # <2>
display: Callable[[float], None] # <3>
) -> None:
temperature = probe()
# imagine lots of control code here
display(temperature)
def probe_ok() -> int: # <4>
return 42
def display_wrong(temperature: int) -> None: # <5>
print(hex(temperature))
update(probe_ok, display_wrong) # type error # <6>
def display_ok(temperature: complex) -> None: # <7>
print(temperature)
update(probe_ok, display_ok) # OK # <8>