Код: Выделить всё
class simple_partial:
def __init__(self, f: Callable, *args, **kwargs) -> None:
self.f = f
self.args = args
self.kwargs = kwargs
def __call__(self, *args, **kwargs):
return self.f(*(*self.args, *args), **(self.kwargs | kwargs))
partially = simple_partial(lambda x, y, z=3: (x, y, z), 1)
partially(2)
Код: Выделить всё
class simple_partial[T, **P]:
def __init__(self, f: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> None:
self.f = f
self.args = args
self.kwargs = kwargs
def __call__(self, *args: P.args, **kwargs: P.kwargs) -> T:
return self.f(*(*self.args, *args), **(self.kwargs | kwargs))
Изменить: две версии ParamSpec:
Код: Выделить всё
class simple_partial[T, **P, **P2]:
def __init__(
self, f: Callable[Concatenate[P, P2], T], *args: P.args, **kwargs: P.kwargs
) -> None:
self.f = f
self.args = args
self.kwargs = kwargs
def __call__(self, *args: P2.args, **kwargs: P2.kwargs) -> T:
return self.f(*(*self.args, *args), **(self.kwargs | kwargs))
Код: Выделить всё
ConcatenateОднако Подробнее здесь: https://stackoverflow.com/questions/790 ... pplication