【发布时间】:2016-10-14 00:25:48
【问题描述】:
假设我们需要一个函数,只要两个参数具有相同的类型,就可以接受任何类型的两个参数。您将如何使用 mypy 对其进行静态检查?
如果我们只需要函数接受一些有限数量的已知类型,那很容易:
from typing import TypeVar, List, Callable
T = TypeVar('T', int, str, List[int], Callable[[], int])
def f(a: T, b: T) -> None:
pass
f(1, 2)
f("1", "2")
f([1], [2])
f(lambda: 1, lambda: 2)
f(1, "2") # mypy will print an error message
对于此代码,mypy 可以确保 f 的参数是两个 ints 或两个 strs 或两个 ints 列表或两个返回 int 的零参数函数。
但是如果我们事先不知道类型怎么办?如果我们需要来自 F# 和 OCaml 的类似于 let f (a:'t) (b:'t) = () 的东西怎么办?简单地写T = TypeVar('T') 会使f(1, "2") 之类的东西有效,这不是我们想要的。
【问题讨论】:
标签: python type-hinting mypy python-typing