Articles of introspección de

¿Cómo averiguar los valores predeterminados del argumento de una función particular en otra función en Python?

Supongamos que tenemos una función como esta: def myFunction(arg1=’a default value’): pass Podemos usar introspección para averiguar los nombres de los argumentos que toma myFunction() usando myFunction.func_code.co_varnames , pero ¿cómo averiguar el valor predeterminado de arg1 (que es ‘a default value’ en el ejemplo anterior)?

Viendo el código de una función de Python

Digamos que estoy trabajando en el shell de Python y se me asigna una función f . ¿Cómo puedo acceder a la cadena que contiene su código fuente? (Desde el shell, no abriendo manualmente el archivo de código). Quiero que esto funcione incluso para las funciones lambda definidas dentro de otras funciones.

En Python, ¿hay una manera de saber si un objeto “implementa una interfaz” antes de pasarlo a una función?

Sé que esto puede sonar como una pregunta estúpida, especialmente para alguien que conoce la naturaleza de Python, pero me preguntaba: ¿hay alguna forma de saber si un objeto “implementa una interfaz” para decir? Para dar un ejemplo de lo que quiero decir: digamos que tengo esta función: def get_counts(sequence): counts = {} for x […]

¿Cómo puedo obtener la expresión de llamada de una función en Python?

Para fines educativos, me gustaría poder imprimir la expresión de llamada completa de la función actual. No necesariamente de un controlador de excepciones. Después de algunas investigaciones, terminé con este código bastante sencillo: import inspect import linecache def print_callexp(*args, **kwargs): try: frame = inspect.currentframe() # method 1, using inspect module only print(inspect.getframeinfo(frame.f_back).code_context) # method 2, […]

Encontrar el nombre del módulo de la excepción de origen en Python

Ejemplo: >>> try: … myapp.foo.doSomething() … except Exception, e: … print ‘Thrown from:’, modname(e) Thrown from: myapp.util.url En el ejemplo anterior, la excepción fue lanzada al módulo myapp / util / url.py. ¿Hay alguna manera de obtener el __name__ de ese módulo? Mi intención es usar esto en la función logging.getLogger .

¿Cómo obtengo la representación de cadena de una variable en python?

Tengo una variable x en python. ¿Cómo puedo encontrar la cadena ‘x’ de la variable. Aquí está mi bash: def var(v,c): for key in c.keys(): if c[key] == v: return key def f(): x = ‘321’ print ‘Local var %s = %s’%(var(x,locals()),x) x = ‘123’ print ‘Global var %s = %s’%(var(x,locals()),x) f() Los resultados son: […]

Python inspect.stack es lento

Solo estaba perfilando mi progtwig Python para ver por qué parecía ser bastante lento. Descubrí que la mayoría de su tiempo de ejecución se gastaba en el método inspect.stack() (para generar mensajes de depuración con módulos y números de línea), a 0.005 segundos por llamada. Esto parece bastante alto; ¿Es inspect.stack realmente lento, o podría […]

¿Averiguar qué funciones están disponibles desde una instancia de clase en python?

¿Cómo averiguas dinámicamente qué funciones se han definido desde una instancia de una clase? Por ejemplo: class A(object): def methodA(self, intA=1): pass def methodB(self, strB): pass a = A() Idealmente, quiero descubrir que la instancia ‘a’ tiene el método A y el método B, y qué argumentos toman?

Recuperar objeto de módulo de marco de stack

Dado un objeto de marco, necesito obtener el objeto de módulo correspondiente. En otras palabras, implementar callers_module para que esto funcione: import sys from some_other_module import callers_module assert sys.modules[__name__] is callers_module() (Eso sería equivalente porque puedo generar un seguimiento de stack en la función para este caso de prueba. Las importaciones están ahí simplemente para […]

Encontrar funciones explícitamente definidas en un módulo (python)

Ok, sé que puedes usar el método dir () para listar todo en un módulo, pero ¿hay alguna forma de ver solo las funciones que están definidas en ese módulo? Por ejemplo, supongamos que mi módulo se ve así: from datetime import date, datetime def test(): return “This is a real method” Incluso si uso […]