Imprimir el nombre del argumento escrito en funciones en Python

Tengo algo como

def myfunc(list): 

Cuando llamo a la función, puedo escribir como

 myfunc(List1) 

¿Hay una manera de imprimir la lista escrita como argumento en la función? Algo como:

 def myfunc(list): print (list.name) 

Eso daría:

 myfunc(List1) List1 

Gracias de antemano

Es posible, puedes encontrarlo dentro de func_globals que es un diccionario, el problema es que s es el ky y 4 es el valor. y sé el valor de param, entonces lo que se hizo es buscar la clave en el diccionario por un valor dado

 def fun(param): print fun.func_globals.keys()[fun.func_globals.values().index(param)] s = 4 fun(s) '[OUT]': s 

esto es func_globals:

 print fun.func_globals '[OUT]': {'__builtins__': , '__file__': 'C:/Users/omri/PycharmProjects/mailer/ff/__init__.py', '__doc__': None, 's': 4, 'fun': , '__name__': '__main__', '__package__': None, 'izip_longest': } 

Si su objective es imprimir la lista real (el argumento que pasa), aquí está el código:

 def myfunc(list1): print list1 #prints the actual list myfunc([1,2,34,5]) [1,2,34,5] #result 

de lo contrario, si está buscando imprimir el nombre de arg, las respuestas anteriores podrían ayudarlo.

Una variante sobre la sugerida por omri-saadon , es utilizar inspect.getframeinfo que enumera el code_context.

 import inspect def debug(*args): try: # find code_context # First try to use currentframe() (maybe not available all implementations) frame = inspect.currentframe() if frame: # Found a frame, so get the info, and strip space from the code_context code_context = inspect.getframeinfo(frame.f_back).code_context[0].strip() else: # No frame, so use stack one level above us, and strip space around # the 4th element, code_context code_context = inspect.stack()[1][4][0].strip() finally: # Deterministic free references to the frame, to be on the safe side del frame print('Code context: {}'.format(code_context)) print('Actual arguments: {}'.format(args)) ## Test code to have something to output ######### def my_seventh(): return 7 a = 0.2 b = 1.2 c = a + 1 my_eight = my_seventh debug(a, b, c, b+2) debug([4.1, 4.2], (5.1, 5.2), {6.1: 6.2}, my_seventh, my_eight, my_eight()) my_list = [1, 2, 3, 4, 5] def first_level(): def second_level(): debug(my_list[:2], my_list[3:]) second_level() first_level() 

La salida al ejecutar este código es:

 Code context: debug(a, b, c, b+2) Actual arguments: (0.2, 1.2, 1.2, 3.2) Code context: debug([4.1, 4.2], (5.1, 5.2), {6.1: 6.2}, my_seventh, my_eight, my_eight()) Actual arguments: ([4.1, 4.2], (5.1, 5.2), {6.1: 6.2}, , , 7) Code context: my_list[3:]) Actual arguments: ([1, 2], [4, 5]) 

En otras palabras, el uso de las opciones de inspección para obtener el frameinfo le dará la línea de origen (o la última línea del mismo) que activó su llamada de función. Sin embargo, si la llamada real se divide en varias líneas, solo la última línea se proporciona como contexto de código. Y hasta ahora no he encontrado una manera de conectar las variables nombradas en el contexto del código a los argumentos reales.