2016-08-26 5 views
1

J'écris une fonction pour prendre * entrées args, évaluer les données, puis passer toutes les entrées à la fonction suivante appropriée (aligner), en prenant également * argsPasser tous les éléments de tuple dans la fonction 1 (de * args) dans la fonction 2 (comme * args) dans python

* args semble être un tuple. J'ai essayé différentes façons de passer chaque élément du tuple dans la fonction suivante, les deux derniers étant:

  for x in args: 
       align(*x) 

et

  for x in args: 
       align(args[0:len(args)])  
+6

Umm, 'align (* args)'? – vaultah

Répondre

1

Vous « les déballer » avec *args. Ensuite, la fonction de réception peut à nouveau les éponger en un tuple (ou pas!).

Ces exemples devraient éclairer les choses:

>>> def foo(*f_args): 
...  print('foo', type(f_args), len(f_args), f_args) 
...  bar(*f_args) 
...  
>>> def bar(*b_args): 
...  print('bar', type(b_args), len(b_args), b_args) 
...  
>>> foo('a', 'b', 'c') 
('foo', <type 'tuple'>, 3, ('a', 'b', 'c')) 
('bar', <type 'tuple'>, 3, ('a', 'b', 'c')) 

Maintenant, nous allons redéfinis bar et briser le argspec:

>>> def bar(arg1, arg2, arg3): 
...  print('bar redefined', arg1, arg2, arg3) 
...  
>>> foo('a', 'b', 'c') 
('foo', <type 'tuple'>, 3, ('a', 'b', 'c')) 
('bar redefined', 'a', 'b', 'c') 
>>> foo('a', 'b') 
('foo', <type 'tuple'>, 2, ('a', 'b')) 
---> TypeError: bar() takes exactly 3 arguments (2 given)