E ' non è chiaro se sei più imbarazzato dalla lunghezza delle espressioni di identificazione da scrivere, o dalla traccia di identificatori rimanenti in uno spazio dei nomi dopo il loro uso.
Per la prima, la tecnica di definire un alias per un lungo prefisso, come descritto da Raymond Hettinger, è quella di impiegare.
Per il secondo, sono sorpreso che nessuno abbia fatto ricorso all'importazione di un modulo in cui vengono consegnate le istruzioni e le linee che considerate pesanti e sporchi.
A proposito, se si accede alle funzioni da os.path.abspath
e os.path.dirnames
, non è corretto dire che le funzioni (suppongo si intende i loro nomi) lettiera lo spazio dei nomi. Dal momento che appartengono al modulo os o os.percorso (dipende da quale è stato importato), ci sono solo il nome del modulo 'os' o 'os.path' nello spazio dei nomi e l'oggetto modulo nella memoria, ma non i nomi delle funzioni direttamente nel namespace.
Quindi, si può creare uno script di nome "heavy_code.py":
def doing(x):
from os.path import abspath as a,dirname as d
## Execute all the desired processes and creations
def fufu(s,t):
return s+t
dedex = d[x]
#.........
#...........
#........
#............
#..........
## Return to the calling scope all that is needed there
return (dedex,fufu)
E nel modulo principale, prendendo acount della risposta di gnibbler:
one_path = 'I:/all/magala/zeru/kiol.py'
try:
from pp.bududu import doing
w,ff = doing(one_path)
finally:
del doing
.
Per vedere come funziona:
one_path = 'I:/all/magala/zeru/kiol.py'
try:
from pp.bududu.heavy_code import doing
print "in try : "
print dir()
print "executing doing()"
w,ff = doing(one_path)
print dir()
finally:
del doing
print "\nafter finally : "
print dir()
print '\nw ==',w
print 'ff(10,12) ==',ff(10,12)
produce come risultato:
in try :
['__builtins__', '__doc__', '__name__', '__package__', 'doing', 'one_path']
executing doing()
['__builtins__', '__doc__', '__name__', '__package__', 'doing', 'ff', 'one_path', 'w']
after finally :
['__builtins__', '__doc__', '__name__', '__package__', 'ff', 'one_path', 'w']
w == I:/all/magala/zeru
ff(10,12) == 22
Dopo l'esecuzione del frammento, la funzione facendo() non esiste più nel modulo principale, ma gli oggetti creati dall'esecuzione di doing() si trovano ora senza una confusione di nomi nello spazio dei nomi del modulo principale. Inoltre, tutti gli identificatori necessari all'interno della funzione doing() sono locali.
La creazione di tutti gli oggetti desiderati e necessari possono essere delegate al modulo heavy_code, qualunque sia quanti sono, durante l'importazione e l'esecuzione della funzione facendo() prende solo due righe nel modulo principale, e funzione doing() in codice_alto più la sua linea chiamante può essere facilmente modificata.
Non è quello a cui è destinato il modulo?
Penso che "chiusura" non sia la parola giusta qui. Vedi http://en.wikipedia.org/wiki/Closure_(computer_science). Forse "namespace temporaneo" è ciò che intendevi? –
@RaymondHettinger - Penso che la parola sia "portata". "Posso definire un ambito diverso dalla funzione, dal modulo globale o incorporato in Python?" – Omnifarious
Di solito, quando si codifica qualcosa, appartiene a una funzione oa un metodo con una quantità ragionevole di righe di codice. Quindi "sporcare lo spazio dei nomi globale" non dovrebbe essere una preoccupazione, o il tuo codice probabilmente ha bisogno di riprogettare oltre "l'ambito". – MatthieuW