En una sesión de IPython, generalmente defino funciones personalizadas ... el problema es que, a veces, quiero ver el código real para estas funciones. Hasta ahora, no he podido encontrar una manera de mostrar esto. Utilizando ? y ?? simplemente devuelve "Función generada dinámicamente. No hay código fuente disponible". ¿Hay alguna manera de mostrar el código fuente para las funciones definidas por el usuario?¿Cómo se muestra el código fuente para la función creada dinámicamente ("personalizada") en IPython?
¿Cómo se muestra el código fuente para la función creada dinámicamente ("personalizada") en IPython?
Respuesta
Trata la historia de la búsqueda:
In [22]: for l in _ih:
....: if l.startswith('def f'):
....: print l
....:
....:
def f():
a= 1
b = 2
return a*b
aunque esto es muy básico, una versión mejor sería analizar sintácticamente/historial de ejecución y ver si se puede conseguir una función de la espalda
Si usted está buscando la fuente de una función definida de forma interactiva-, se puede encontrar la más reciente definición de la misma en la historia de IPython:
[i for (i, l) in enumerate(_ih) if l.startswith('def foo(')][-1]
a continuación, puede editar esa línea:
%edit 42
Se abrirá el Bloc de notas u otro editor de texto con la definición de la función en él.
O puede guardar en un archivo:
%save foo.py 42
Esto funciona, aunque en este caso específico utilicé un% paste así que todo lo que mostró fue el comando de pegar mágico para esa línea. Buena solución de lo contrario, aunque –
estoy usando Python 2.7.4 y 0.13.2 IPython.
puedo ver el origen de una función dinámica creada en IPython usando ??
antes de que el nombre de la función:
In [8]: ??sort_words
Type: function
String Form:<function sort_words at 0x189b938>
File: /tmp/ipython_edit_yc1TIo.py
Definition: sort_words(s)
Source:
def sort_words(s):
x = re.findall(r'\W+(\w+)', s)
x.sort()
for i in x:
print i
Tal vez esto ya está disponible en las versiones más recientes de IPython? Qué versión estás usando?
sí, esto es correcto; Hice esta pregunta cuando (creo) 0.12 no era la versión estable, y esto no estaba disponible en 0.11. Ver el comentario de Thomas K sobre la pregunta –
Fumctions en IPython se consideran generadas dinámicamente si:
se metaprogrammed - Son creados por otra función. en este caso, no hay código fuente, simplemente no existe.
se les hace referencia en un espacio de nombre diferente para el que se crearon y no hay información en cuanto a qué espacio de nombres se encuentran originalmente. En este caso, averigüe dónde estaban originalmente y se ejecutan ?? desde allí.
No estoy seguro de entender su caso "meta-programado": en IPython 1.1.0, se puede ver con '??' el código de funciones creado dentro de otra función ('def f(): def g(): ... return g'). – EOL
- 1. muestra el código fuente para la función en R
- 2. ¿Cómo se muestra la función, el procedimiento y el código fuente de los desencadenadores en postgresql?
- 3. Mi fuente personalizada no muestra
- 4. Cómo mapear tabla creada dinámicamente en Hibernate?
- 5. Fuente personalizada que no se muestra en el dispositivo, pero sí en el simulador
- 6. creada dinámicamente matriz rectangular irregular
- 7. WPF: Cómo agregar controles dinámicamente en la ventana WPF creada dinámicamente
- 8. Entrando en una función en IPython
- 9. La fuente personalizada a veces se muestra en cursiva en IE8/IE7
- 10. Cómo establecer dinámicamente un nombre de función/objeto en Javascript tal como se muestra en Chrome
- 11. controles no aparecen en el control de usuario creada dinámicamente
- 12. JSP que muestra el código fuente en lugar de ejecutar
- 13. IE8 Profiler de Javascript que no muestra el código fuente
- 14. fuente personalizada para textview en ArrayAdapter
- 15. ¿Cómo se muestra el código fuente con sangría en una página web? HTML? CSS?
- 16. ¿Cómo se muestra el código fuente en windbg a través de ntsd -d?
- 17. Visual Studio: muestra todas las llamadas a una función en el nivel de código fuente
- 18. ¿Por qué se muestra mi código fuente de PHP?
- 19. Widget StackView Código fuente de muestra
- 20. Código fuente para el procedimiento almacenado específico o función
- 21. Fuente personalizada en ckeditor
- 22. ¿Cómo se muestra el código de una rutina .C utilizada por la función R?
- 23. ¿Cómo se organiza el código fuente de clase en Java?
- 24. Cinta personalizada en VSTO Addin para Outlook 2010 no muestra
- 25. Fuente personalizada en Android
- 26. Consultar datos utilizando Entity Framework desde la tabla creada dinámicamente
- 27. Ignorando el código fuente en el depurador
- 28. ¿Cómo se muestra el prototipo de función en Emacs?
- 29. ItextSharp (Itext): configure la fuente personalizada para el párrafo
- 30. Cómo agrego elementos dinámicamente a una vista creada con XML
¿Qué crea la función "personalizada"? ¿Puede proporcionar alguna fuente que indique cómo los está creando? – kindall
algo como: 'bla def (d, b): retorno (d> 10 y b <10)' (interactivamente definidas habría sido mejor, lo siento) –
¿Qué versión de IPython tiene usted? En versiones recientes, 'f ??' funciona en funciones definidas interactivamente. –