2009-04-22 13 views
9

en double de ..réflexion Python - Puis-je utiliser pour obtenir le code source d'une définition de la méthode


I avoir une définition de méthode qui est le succès pleinement en cours d'exécution, mais que vous souhaitez modifier en cours d'exécution.

pour par exemple: Si j'ai une méthode

def sayHello(): 
    print "Hello" 
Type

(sayHello) me donne la réponse 'de la fonction de type'. Vais-je pouvoir obtenir la chaîne de code source de cet objet fonction. Est-ce considéré comme un problème de sécurité?

+3

Vous ne pouvez pas le faire. Dupliquer: http://stackoverflow.com/questions/427453/how-can-i-get-the-code-of-python-function; http://stackoverflow.com/questions/334851/print-the-code-which-defined-a-lambda-function; http://stackoverflow.com/questions/399991/python-how-do-you-get-python-to-write-down-the-code-of-a-function-it-has-in-memo –

+0

C'est Python : vous avez déjà la source. –

+3

Je recommande fortement de poser une autre question avec plus de détails. J'ai le sentiment le plus drôle que ce que vous voulez vraiment faire ne nécessite que des fermetures/décorateurs, mais parce que tout ce que vous avez demandé est d'imprimer le code source (et d'essayer de le modifier), vous obtenez des réponses décevantes. –

Répondre

2

sayHello.func_code.co_code renvoie une chaîne qui, selon moi, contient le code compilé de la méthode. Puisque Python compile en interne le code au bytecode de la machine virtuelle, cela pourrait être tout ce qui reste.

Vous pouvez le démonter, cependant:

import dis 

def sayHello(): 
    print "hello" 

dis.dis(sayHello) 

Cette impression:

 
    1   0 LOAD_CONST    1 ('hello') 
       3 PRINT_ITEM 
       4 PRINT_NEWLINE 
       5 LOAD_CONST    0 (None) 
       8 RETURN_VALUE 

Jetez un oeil à Decompyle pour un de compilateur.

0

Il n'y a pas de fonction intégrée pour obtenir le code source d'une fonction, cependant, vous pouvez construire vous-même si vous avez accès au code source (ce serait dans votre répertoire Python/lib).

17

Utilisez l'inspection Module:

import inspect 
import mymodule 
print inspect.getsource(mymodule.sayHello) 

La fonction doit être définie dans un module que vous importez.

Questions connexes