2016-03-15 2 views
3

Допустим, у меня есть функция, как это:Изменение ключевых слов по умолчанию функции в Python

def func_1(a, b=1, c=None): 
    code here 

Теперь я хочу сделать еще одну функцию, которая имеет те же внутренние, но разные аргументы ключевых слов.

def func_2(a, b=2, c='asdf'): 
    code here 

Одним из вариантов было бы закрытие, как это:

def make_func(b, c): 
    def func(a, b=b, c=c): 
     code here 
    return func 

func_1 = make_func(1, None) 
func_2 = make_func(2, 'asdf') 

Есть ли более кратким/Pythonic способ пойти по этому поводу?

+0

Почему использовать замыкание? Просто позвоните один из другого: 'def func_2 (a, b = 2, c = 'asdf'): func_1 (a, b, c)' – jonrsharpe

+0

@jonrsharpe: закрытие действует как завод, чтобы создавать больше таких функций. Я сделал тот же комментарий, а затем удалил его снова, как только понял. –

+0

@MartijnPieters true, но генерация функций динамически кажется ненужной для небольшого числа (не говоря уже о том, что это может сделать жизнь сложнее для IDE). – jonrsharpe

ответ

3

Используйте functools.partial() object:

from functools import partial 

func_2 = partial(func_1, b=2, c='asdf') 

Значение по умолчанию, подаваемого на парциальный может быть переопределена снова при вызове его:

>>> from functools import partial 
>>> def func_1(a, b=1, c=None): 
...  return a, b, c 
... 
>>> func_2 = partial(func_1, b=2, c='asdf') 
>>> func_2(42) 
(42, 2, 'asdf') 
>>> func_2(42, b=5, c='spam') 
(42, 5, 'spam') 
Смежные вопросы