2016-10-14 4 views
-1

Veuillez lire attentivement. Ce n'est PAS un doublon de questions Stack précédemment résolues.Comment obtenir les littéraux de noms d'arguments de fonction en Python

Comment obtenir les noms, chaînes littérales, des arguments passés à une fonction, dans l'environnement de la fonction?

Pseudo-code:

def myfunc(model, arg_is_list, num): 
    # define magical_command that gets args NAMES 
    print 'Your passed args are:', magical_command_return 
    # use arg_is_list, use model... 

solution idéale:

$mylist={} 
    $mylist=[1,2,3] 
    $linear = some_library_model 
    $myfunc(model='linear', arg_is_list='mylist', num=2) 
    >Your passed args are: 'linear', 'mylist', '2' 

Toute aide que je peux obtenir serait très apprécié. Merci. Module

+0

double possible de http://stackoverflow.com/questions/544919/can-i-print-original-variables-name-in-python –

+3

I » Je suis désolé, je ne comprends pas. Pourquoi ne pouvez-vous pas simplement 'imprimer()' les arguments? –

Répondre

1

inspect offre cette fonctionnalité d'introspection:

>>> import inspect 
>>> 
>>> def myfunc(model, arg_is_list, num): 
...  print 'Your passed args are:', 
...  arg_names = inspect.getargspec(myfunc).args 
...  for name in arg_names: 
...   print repr(locals()[name]), 
... 
>>> myfunc(model='the model', arg_is_list='arrrggg', num=42) 
Your passed args are: 'the model' 'arrrggg' 42 
+0

@ wim: malheureusement cela ne fonctionne que pour arg # 3: 'num = 42'. L'arg de type liste est littéralement imprimé avec des valeurs d'éléments et pas de nom ... même chose pour 'model': les détails du modèle mais pas le nom – remi

+0

Pourquoi utiliser' inspect'? Vous pouvez simplement obtenir les noms et les valeurs de 'locals'. – ekhumoro

+0

@ekhumoro ... parce que les locaux ont d'autres noms, par ex. variables de fermeture. Comment savez-vous quels sont les arguments et lesquels ne le sont pas? – wim