En JavaScript, on peut imprimer la définition d'une fonction. Existe-t-il un moyen d'accomplir cela en Python ?
(Je jouais juste en mode interactif, et je voulais lire un module sans open(). J'étais juste curieux).
En JavaScript, on peut imprimer la définition d'une fonction. Existe-t-il un moyen d'accomplir cela en Python ?
(Je jouais juste en mode interactif, et je voulais lire un module sans open(). J'étais juste curieux).
Si vous importez la fonction, vous pouvez utiliser inspect.getsource
:
>>> import re
>>> import inspect
>>> print inspect.getsource(re.compile)
def compile(pattern, flags=0):
"Compile a regular expression pattern, returning a pattern object."
return _compile(pattern, flags)
Ce site se fonctionnent dans l'invite interactive, mais apparemment uniquement sur les objets importés (pas sur les objets définis dans l'invite interactive). Et bien sûr, cela ne fonctionnera que si Python peut trouver le code source (donc pas sur les objets intégrés, les librairies C, les fichiers .pyc, etc).
Les fonctions qui sont créées au moment de l'exécution (y compris l'invite interactive) n'ont pas non plus de numéro de fichier ou de ligne, ce qui est logique.
Qu'en est-il de l'impression d'une définition de fonction que j'ai définie plus tôt dans l'interpréteur Python interactif actuel ? Est-ce possible ?
Bien que je sois généralement d'accord pour dire que inspect
est une bonne réponse, je ne suis pas d'accord pour dire que vous ne pouvez pas obtenir le code source des objets définis dans l'interpréteur. Si vous utilisez dill.source.getsource
de dill
vous pouvez obtenir la source des fonctions et des lambdas, même si elles sont définies de manière interactive. Il peut également obtenir le code des méthodes et des fonctions de classes liées ou non liées définies dans des curries... cependant, il se peut que vous ne puissiez pas compiler ce code sans le code de l'objet englobant.
>>> from dill.source import getsource
>>>
>>> def add(x,y):
... return x+y
...
>>> squared = lambda x:x**2
>>>
>>> print getsource(add)
def add(x,y):
return x+y
>>> print getsource(squared)
squared = lambda x:x**2
>>>
>>> class Foo(object):
... def bar(self, x):
... return x*x+x
...
>>> f = Foo()
>>>
>>> print getsource(f.bar)
def bar(self, x):
return x*x+x
>>>
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Vous avez la source de la fonction. Qu'est-ce qui ne va pas avec ça ?
1 votes
Et en mode interactif, vous pouvez utiliser help(function) pour afficher la docstring de la fonction.
0 votes
Il y a un double de cette question : stackoverflow.com/questions/427453/
0 votes
@S.Lott s'il y a un moyen qui est bon. par exemple les débutants peuvent imprimer une fonction décorée et voir facilement les changements.