Вот код >
Код: Выделить всё
from pydantic import BaseModel, validate_call, ConfigDict
# Class with pydantic method validation
class User1(BaseModel):
value:int
@staticmethod
@validate_call(config=ConfigDict(strict=True))
def add(x:int, y:int) -> int:
return x + y
# Class with "handmade" type validation
class User2(BaseModel):
value:int
@staticmethod
def add(x:int, y:int) -> int:
if not isinstance(x,int):
raise TypeError('wrong x')
if not isinstance(y,int):
raise TypeError('wrong y')
return x + y
user1 = User1(value=10)
user2 = User2(value=10)
Код: Выделить всё
%%timeit
user1.add(1,1)
Код: Выделить всё
%%timeit
user2.add(1,1)
Оба класса являются классами pydantic BaseModel . А в User1 я использовал config = ConfigDict...строгую проверку в надежде на лучшую производительность (но использовать ее или нет в принципе не имеет значения).
Не должно ли быть ядро pydantic написано на Русте? Я что-то упускаю или делаю что-то не так?
Я знаю, что с validate_call у вас есть доступ к гораздо более сложным методам проверки и анализа, но почему это намного медленнее, чем несколько операторов if и isinstance() звонки?
Подробнее здесь: https://stackoverflow.com/questions/782 ... isinstance