import re
x = re.compile(r"hello")
在上面的代码中,
x
被确定为类型re.Pattern[str]
。但为什么 re.Pattern
是通用的,然后专门用于字符串呢? re.Pattern[int]
代表什么?
re.Pattern
变得通用,因为您还可以编译仅在 bytes
对象上运行的 bytes
模式:
p = re.compile(b'fo+ba?r')
p.search(b'foobar') # fine
p.search('foobar') # TypeError: cannot use a bytes pattern on a string-like object
在类型检查时,它被定义为通用的
AnyStr
:
class Pattern(Generic[AnyStr]):
...
AnyStr
是具有两个约束 TypeVar
和 str
的 bytes
:
AnyStr = TypeVar("AnyStr", str, bytes)
因此,re.Pattern[int]
毫无意义,会导致类型检查错误。