En Python, obtenga el argumento pasado a una función como una cadena dentro de la función

Actualmente estoy intentando acceder a los argumentos de una función de Python como cadenas, porque me gustaría usarlos en una convención de nomenclatura para la salida de la función. Para comenzar, primero me gustaría crear una función que simplemente “haga eco” de sus argumentos (consulte Obtención de una lista de nombres de parámetros dentro de la función python ). Intenté esto:

import inspect def echo_arguments(arg1,arg2): frame = inspect.currentframe() args, _, _, _ = inspect.getargvalues(frame) arg1=args[0] arg2=args[1] return arg1, arg2 

Sin embargo, si trato de llamarlo, obtengo esto:

 >>> (h1,h2)=echo_arguments('hello','world') >>> h1 'arg1' >>> h2 'arg2' 

En otras palabras, está devolviendo los argumentos ‘ficticios’ de cuando se definió la función, en lugar de los argumentos ‘actuales’ en el momento en que se llama la función. ¿Alguien sabe cómo podría conseguir este último?

Usa el retorno de los lugareños por getargvalues :

 import inspect def echo_arguments(arg1,arg2): frame = inspect.currentframe() args, _, _, locals_ = inspect.getargvalues(frame) return (locals_[arg] for arg in args) 

Resultados en:

 >>> (h1,h2)=echo_arguments('hello','world') >>> h1 'hello' >>> h2 'world' 

Yo usaría el objeto ArgInfo que es devuelto por inspect.getargvalues() . Incluye los nombres de los argumentos, así como los valores actuales en el dictamen de los locales.

 In [1]: import inspect In [2]: def foo(a,b=None): ...: frame = inspect.currentframe() ...: args = inspect.getargvalues(frame) ...: return args In [3]: args = foo(1234,b='qwerty') In [4]: print args ArgInfo(args=['a', 'b'], varargs=None, keywords=None, locals={'a': 1234, 'frame': , 'b': 'qwerty'}) In [5]: print [(arg,args.locals[arg]) for arg in args.args] [('a', 1234), ('b', 'qwerty')] 

Todo lo que necesitas para obtener el contenido de esas variables son las propias variables.

 def echo_arguments(arg1, arg2): return arg1, arg2 >>> (h1, h2) = echo_arguments('hello', 'world') >>> h1 'hello' >>> h2 'world'