19 aprile 2009

PYTHON Funzioni Annidate

Annidare le funzioni(le def) nelle ultime versioni di python e del tutto normale. Semplicemente le def sono codice eseguibile a tutti gli effetti, ma nelle "vecchie" versioni non era affatto cosi.

La def delle versioni recenti.

>>> def func():
... scope_func = 'marameoo'
""" una funzione e del codice eseguibile
a tutti gli effetti"""
... def func_annidata():
... print 'tu sei un ..', scope_func
... return func_annidata
...
>>> chiamata = func()
>>> chiamata() # esegue la def annidata
tu sei un .. marameoo
>>>


Questo codice che nelle versioni 2.4, 2.5, 2.6 di Python funziona a meraviglia, ma se lo provate in una versione precedente a quelle appena elencate vedrete che produce degli errori.

Per ottenere del codice che funziona in qualsiasi versione di python ha bisogno che la def annidata referenzi il valore passato dalla def precedente.

Vediamo un esempio.

>>> def func():
... scope_func = 'marameoo'
... # Referenza
... def func_annidata(scope_func = scope_func):
... print 'tu sei un ..', scope_func
... func_annidata()
...
>>> func() # chiamata alla funzione
tu sei un .. marameoo
>>>

Nessun commento: