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] бессмысленно и может привести к ошибке проверки типа.
re.Pattern[int]не имеет смысла. Возможные параметры:strилиbytesdocs.python.org/3/library/re.html#re-objects