2015-02-17 10 views
2

Я пытаюсь понять, если это хорошая идея или не передавать в качестве параметра эквивалент пула, равный null; который я считаю Нет.Правильно передать None параметру?

Пример: у вас есть функция, которая принимает n параметров; в одном случае мне нужен только первый и второй параметр, поэтому вместо того, чтобы писать длинное определение функции с помощью args и kwargs и манипулировать ими, я могу просто передать null одному из параметров.

def myfunct(a, b, c[optional], d[optional], e, f....n): 
    [do something] 
    if d=="y": 
     [do something but use only a and b] 

Исполнение:

myfunct(a, b, c, d, .....n)    #OK! 
myfunct(a, b, None, "y", None,....n)  #OK? 

Это теоретически не должно вызвать ошибку, так как нуль является значение Я считаю (это не C++), хотя я не уверен, что это правильный путь заниматься вещами. Функция знает, что существует условие, когда один из параметров является конкретным значением, и в этом случае он не будет запрашивать какой-либо другой параметр, кроме 1; поэтому риск использования нулевого значения должен быть практически 0.

Является ли это приемлемым, или я могу потенциально вызвать проблемы в будущем, используя этот подход?

+1

насчет определения дополнительных значений как None по умолчанию, и просто не указывая их при вызове метода? –

+0

Могу ли я это сделать? Это действительно более прямолинейно. Мое сомнение касалось ключевого слова None, и я могу использовать его в параметрах. Спасибо –

ответ

4

Нет ничего плохого в использовании None для обозначения «Я не доставляю этот аргумент».

Вы можете проверить None в коде:

if c is None: 
    # do something 
if d is not None: 
    # do something else 

Одна из рекомендаций, я хотел бы сделать это, чтобы никто не был аргумент по умолчанию для каких-либо дополнительных аргументов:

def myfunct(a, b, e, f, c=None, d=None): 
    # do something 

myfunct(A, B, E, F) 
+0

Обратите внимание, что 'def myfunct (a, b, c = None, d = None, e, f):' не является законным Python. – Rufflewind

+1

Ваш второй пример не будет работать - аргументы по умолчанию должны поступать * после * всех необходимых аргументов. – Gretchen

+0

Спасибо за разъяснение. Действительно, я не могу иметь смешанные обязательные и необязательные параметры; необязательный должен быть в конце списка). –

Смежные вопросы