Sök…


Visa bytekoden för en funktion

Python-tolkaren sammanställer kod till bytekod innan den körs på Pythons virtuella maskin (se även Vad är python-bytekod?) .

Så här visar du bytekoden för en Python-funktion

import dis

def fib(n):
    if n <= 2: return 1
    return fib(n-1) + fib(n-2)

# Display the disassembled bytecode of the function.
dis.dis(fib)

Funktionen dis.dis i dis-modulen kommer att återvända en dekompilerade bytekod av funktionen skickas till den.

Utforska kodobjektet för en funktion

CPython tillåter åtkomst till kodobjektet för ett funktionsobjekt.

Objektet __code__ innehåller den råa bytekoden ( co_code ) för funktionen samt annan information som konstanter och variabla namn.

def fib(n):
    if n <= 2: return 1
    return fib(n-1) + fib(n-2)
dir(fib.__code__)

def fib(n):
    if n <= 2: return 1
    return fib(n-1) + fib(n-2)
dir(fib.__code__)

Visa källkoden för ett objekt

Objekt som inte är inbyggda

För att skriva ut källkoden för ett Python-objekt använder du inspect . Observera att detta inte fungerar för inbyggda objekt eller för objekt som definieras interaktivt. För dessa behöver du andra metoder som förklaras senare.

Så här skriver ut källkoden för metoden randint från random modulen:

import random
import inspect

print(inspect.getsource(random.randint)) 
# Output:
#    def randint(self, a, b):
#        """Return random integer in range [a, b], including both end points.
#        """
#
#        return self.randrange(a, b+1)

För att bara skriva ut dokumentationssträngen

print(inspect.getdoc(random.randint))
# Output:
# Return random integer in range [a, b], including both end points.

Skriv ut hela sökvägen för filen där metoden random.randint definieras:

print(inspect.getfile(random.randint))
# c:\Python35\lib\random.py
print(random.randint.__code__.co_filename) # equivalent to the above
# c:\Python35\lib\random.py

Objekt definieras interaktivt

Om ett objekt definieras interaktivt kan inspect inte ange källkoden utan du kan använda dill.source.getsource istället

# define a new function in the interactive shell
def add(a, b):
   return a + b
print(add.__code__.co_filename) # Output: <stdin> 

import dill
print dill.source.getsource(add)
# def add(a, b):
      return a + b

Inbyggda föremål

Källkoden för Pythons inbyggda funktioner är skriven i c och kan endast nås genom att titta på Pythons källkod (värd på Mercurial eller nedladdningsbar från https://www.python.org/downloads/source/) .

print(inspect.getsource(sorted)) # raises a TypeError
type(sorted) # <class 'builtin_function_or_method'>


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow