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
илиbytes
docs.python.org/3/library/re.html#re-objects