19.3.3 Esempi

Questa sezione mostra vari semplici esempi di AST per codice sorgente Python. Gli esempi mostrano come usare la funzione parse(), come si presenta il ``repr'' di un AST e come accedere agli attributi di un nodo AST.

Il primo modulo definisce una singola funzione. Si assuma che sia memorizzata in /tmp/doublelib.py.

"""Questo  un modulo di esempio.

Questa  la docstring.
"""

def double(x):
    "Restituisce due volte l'argomento"
    return x * 2

Nella sessione interattiva dell'interprete qui sotto, per favorire la leggibilit, vengono riformattate le lunghe repr dell'AST. Le repr AST usano nomi di classi non qualificate. Se si vuole creare un'istanza a partire da una repr, si devono importare i nomi della classe dal modulo compiler.ast.

>>> import compiler
>>> mod = compiler.parseFile("/tmp/doublelib.py")
>>> mod
Module('Questo  un modulo di esempio.\n\nQuesta  la docstring.\n', 
       Stmt([Function('double', ['x'], [], 0, 'Restituisce due volte l'argomento', 
       Stmt([Return(Mul((Name('x'), Const(2))))]))]))
>>> from compiler.ast import *
>>> Module('Questo  un modulo di esempio.\n\nQuesta  la docstring.\n', 
...    Stmt([Function('double', ['x'], [], 0, 'Restituisce due volte l'argomento', 
...    Stmt([Return(Mul((Name('x'), Const(2))))]))]))
Module('Questo  un modulo di esempio.\n\nQuesta  la docstring.\n', 
       Stmt([Function('double', ['x'], [], 0, 'Restituisce due volte l'argomento',
       Stmt([Return(Mul((Name('x'), Const(2))))]))]))
>>> mod.doc
'Questo  un modulo di esempio.\n\nQuesta  la docstring.\n'
>>> for node in mod.node.nodes:
...     print node
... 
Function('double', ['x'], [], 0, 'Restituisce due volte l'argomento',
         Stmt([Return(Mul((Name('x'), Const(2))))]))
>>> func = mod.node.nodes[0]
>>> func.code
Stmt([Return(Mul((Name('x'), Const(2))))])

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.