Функция partial
в модуле functools
( документация ) может создавать новый объект функции, ведущий себя так, как вы хотите.
import functools
def add_num(a, b):
c = a + b
return c
x = functools.partial(add_num, 5, 2)
print(x()) # prints 7
Вы также можете указать только один аргумент и указать другой при вызове «частичной» функции:
y = functools.partial(add_num, 5)
print(y(6)) # prints 11
Это работает и для аргументов ключевых слов:
z = functools.partial(add_num, b=5)
print(z(10)) # prints 15
Как предлагается в комментариях, другой вариант - использовать выражение lambda
( документация ), которое является просто сокращением для создания новой функции.
f = lambda: add_num(25, 30)
print(f()) # prints 55
# the lambda definition is equivilent to
def f():
return add_num(25, 30)
В можно также можно изменить исходную функцию, как показано в вопросе, но в большинстве случаев это будет считаться плохим стилем. Если вы действительно этого хотите, вы можете сделать это, добавив параметры в качестве атрибута .func_defaults
объекта функции (в старых версиях Python .__defaults__
; документация ).
add_num.func_defaults = (1, 2)
print(add_num()) # prints 3