Esistono metodi per mappare il flusso di un programma? [chiuso]

-1

Sto scrivendo uno script di modellazione composto da molte funzioni, e sto cercando di mantenere un documento in esecuzione che assomigli a questo:

build_model(data, outcome_variable) returns(model)
     clean_data(data, outcome_variable) returns(cleaned_data)
        clean_character_data(data, outcome_variable) returns(data_with_chars_cleaned)
        clean_numeric_data(data_with_chars_cleaned, outcome_variable) returns(data_with_chars_and_numerics_cleaned)
     train_model(clean_data, outcome_variable) returns(model)

Solo il mio script di modellazione è un po 'più complicato. Fondamentalmente mi sto chiedendo come le persone di solito tengano traccia di quali funzioni stanno chiamando altre funzioni, ed esprimono ciò in termini di input e output.

    
posta Moderat 20.05.2016 - 04:49
fonte

1 risposta

2

(1) I nomi di variabili e funzioni auto-descrittivi aiutano a livello di funzione, ovvero scrivendo:

data_with_chars_cleaned = clean_character_data(...)

rende superfluo aggiungere un commento # returns ... . Mantenendo le funzioni di piccole dimensioni è più semplice trovare un nome descrittivo.

(2) Buone astrazioni non rendono necessario mantenere tutte le minuzie nella tua testa. Tutto ciò che una funzione "dovrebbe" essere allo stesso livello di astrazione, ad es. qui ogni istruzione nella funzione è allo stesso livello di astrazione:

def build_model(data):
    cleaned_data = clean_data(data)
    model = create_new_model()
    trained_model = train_model(model, cleaned_data)

Quando edificio un modello non avrei bisogno di sapere i dettagli di come i dati vengono puliti , come il modello è stato creato, o come il modello è stato addestrato.

Confronta quanto sopra per:

def build_model(data):
    # clean numeric data
    cleaned_data = CleanDataConatiner()
    for item in data:
        if item not in NaN, None, -Inf:
            cleaned_data.add(item)
    # clean character data
    ...
    model = create_new_model()
    trained_model = train_model(model, cleaned_data)

Si dice che il tuo cervello può tenere solo 4-7 elementi nella memoria di lavoro in qualsiasi momento, quindi mantenere le funzioni a un livello di astrazione che ti permette di avere solo 4-7 loop / rami / chiamate per funzione renderà è più facile da digerire.

Ci sono anche strumenti grafici che costruiranno per es. chiama i grafici per te in base alla tua lingua. A seconda della lingua, puoi anche scrivere un codice che riporti le chiamate tu stesso. Vedo entrambi questi strumenti come più strumenti di debugging che come strumenti di visualizzazione del flusso del programma: imho, la visualizzazione del flusso di dati è solitamente più utile quando si cerca di capire un sistema.

    
risposta data 20.05.2016 - 09:57
fonte

Leggi altre domande sui tag