Definizioni di funzioni locali Python: il nome nasconde la cattiva pratica?

3

È considerata una cattiva pratica cercare di nascondere le funzioni locali in Python? L'intenzione di non ingombrare lo spazio dei nomi globale con nomi di seconde classifiche o di funzioni comuni può essere contro ... ehm ... alcuni Pythonism di cui non sono a conoscenza.

def foo(aparameter):
     def somenamewhichislikelytoclash(anotherparam):
         ....

C'è una penalità di runtime? AFAIK comunque tutti i contesti delle funzioni vengono creati nell'heap, quindi legare e distruggere richiederebbe altrettanto tempo per i locali - c'è di più?

Lo sto chiedendo specificamente per il contesto Python, in quanto ne so abbastanza sulla separazione delle preoccupazioni, sulla pulizia del namespace ecc. in altre lingue.

    
posta Vroomfondel 07.12.2017 - 15:46
fonte

1 risposta

3

Nascondere / schermare in questo modo è generalmente una cattiva idea dal punto di vista della manutenzione del codice. A meno che la posizione della definizione non sia molto vicina al suo utilizzo (quindi un programmatore può mantenere sia la definizione che l'uso nello stesso contesto visivo), è troppo facile confondersi. Anche in questo caso, il ri-factoring e altri tipi di manutenzione del codice potrebbero eliminare la definizione a valle e quindi la definizione e l'uso potrebbero non essere vicini l'un l'altro.

Ci sono pochissimi scenari in cui è necessario / si desidera riutilizzare un nome di funzione a meno che non si stia eseguendo l'override delle funzionalità definite in precedenza e, in tal caso, si dovrebbe probabilmente introdurre una struttura oggetto / classe per soddisfare questo comportamento.

    
risposta data 07.12.2017 - 21:24
fonte

Leggi altre domande sui tag