2010-05-03 5 views

Répondre

4

Sinon syntaxiquement, alors en fonction de ce que le comportement que vous voulez:

def do_it(*args): 
    if not args: args = (2, 5, 21) 

ou

def do_it(a=2, b=5, c=21, *args): 
    args = (a,b,c)+args 

devrait le faire.

1

Initialiser une liste comme cela n'est généralement pas une bonne idée.

La valeur par défaut est évaluée une seule fois. Cela fait une différence lorsque la valeur par défaut est un objet modifiable tel qu'une liste, un dictionnaire ou des instances de la plupart des classes. Par exemple, la fonction suivante accumule les arguments qui lui sont passés sur les appels suivants

def f(a, L=[]): 
    L.append(a) 
    return L 

print f(1) 
print f(2) 
rint f(3) 

Ce imprimera

[1] 
[1, 2] 
[1, 2, 3] 

Je vérifie généralement quelque chose est passé et sinon init il dans le corps de la fonction.

+2

Si les objets à l'intérieur du tuple sont immuables, alors l'exemple de l'OP est sûr puisque le tuple lui-même est immuable. –

+0

Vous avez tellement raison. Je pensais à des objets mutables qu'un tuple n'est pas. Merci pour la correction. –

Questions connexes