2015-01-19 2 views
0

Я хочу написать функцию Python myfun, которая принимает только необязательные параметры, a и b.Функции с ** kwargs

Если ни один из a или b не указан при вызове myfun, как я могу сказать myfun использовать какое-то значение по умолчанию для a и b?

def myfun(**kwargs): 

    a = kwargs.get('a', None) 
    # if a is not specified, use default a=4.4 

    b = kwargs.get('b', None) 
    # if b is not specified, use default b=2.1  

    c = 2*a 
    d = 3.1*b 

    return c, d 


c,d = myfun(a=1,b=2) 
print c,d 

ответ

4

**kwargs используется для сбора в произвольное число из именованных аргументов. Если вы хотите принять только два, то это не правильный инструмент для использования.

Вместо этого, вы должны указать значения по умолчанию для параметров a и b:

def myfun(a=4.4, b=2.1): 

Демо:

>>> def myfun(a=4.4, b=2.1): 
...  print('a={}\nb={}'.format(a, b)) 
... 
>>> myfun() 
a=4.4 
b=2.1 
>>> myfun(a=1) 
a=1 
b=2.1 
>>> myfun(a=1, b=2) 
a=1 
b=2 
>>> myfun(b=2) 
a=4.4 
b=2 
>>> 
+0

+1 к примеру. Итак, какой инструмент я должен использовать вместо этого? Моя функция предназначена только для «игрушечной» проблемы, и я работаю над чем-то более сложным. –

+0

@MedullaOblongata Его трудно для нас знать, поскольку мы не знаем, какова ваша сложная проблема. Может быть, вы должны отправить другой вопрос с помощью функции, которую вы на самом деле пытаетесь написать. –

0

установить их значение по умолчанию:

def myfun(a=4.4,b=2.1): 

было бы чтобы пользователь не мог установить a и b, если вы не добавили их в качестве ключевых слов в определение функции.

Если вы устанавливали значение с помощью kwargs.get вы бы передать значение по умолчанию, чтобы получить:

a = kwargs.get('a', 4.4) # a = 4.4 if a not in kwargs 

b = kwargs.get('b', 2.1) 
Смежные вопросы