2015-06-13 2 views
-1

Привет Я пытаюсь понять, как реализовать необязательные аргументы в функции python. Например, в основной функции нижеопределение функций с необязательными аргументами

def Ham(p,*q): 
    if q: 
     print p+q 
    else: 
     print p 

Ham(2) 


Ham(2,3) 

Я ожидаю Ham (2), чтобы вернуть '2', которые он делает, однако Ham (2,3) дает ошибку.

EDIT: Большое спасибо. Многие из ваших ответов были полезны.

+0

Вы читали соответствующие разделы [учебник Python] (https://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions) ? – BrenBarn

+0

также, посмотрите на '* args' и' ** kwargs'. – brunsgaard

ответ

2

В вашем конкретном примере, я думаю, что вы имеете в виду сделать:

def Ham(p,q=None): 
    if q: 
     print p+q 
    else: 
     print p 

То есть, дать q значение по умолчанию None, а затем вычислить только p+q если q предусмотрено. Еще проще было бы:

def Ham(p,q=0): 
    print p+q 
+0

Это был плохой пример. Я пытался использовать необязательный аргумент. –

+0

@Имран, не копайся в себе глубже. '* q' не делает то, что, по вашему мнению, делает, читайте учебник. – alexis

0

Используя * д вы specifyng список аргументов не известны до выполнения и питона ожидает д быть кортеж, это означает, что вы можете назвать Хэма, как показано ниже:

Ham(1, 2) # q = (2,) 
Ham(1, 2, 3) # q = (2, 3) 
Ham(1, 2, 3, 4) # q = (2, 3, 4) 

Insidia Хама функции вы должны обрабатываем q как кортеж, я имею в виду q [0], а не q. Вы можете взглянуть на this link, чтобы иметь лучшую идею.