2017-10-02 3 views
-2

J'ai un tas de fonctions de traitement de texte qui ressemble à ceci:Quelle est la manière la plus élégante de réécrire un tas de ces fonctions python?

def sample_func(txt=None, file_input=None, file_output=None): 
    if txt is None: 
     raw_txt = get_text_from_file(file_input) 
    else: 
     raw_txt = txt 

    cleaned_txt = re.sub(r'\n\n', '\n', raw_txt) 

    if file_output is not None: 
     write_text_to_file(cleaned_txt, file_output) 
    return cleaned_txt 

Lorsque vous avez 10+ d'eux, il devient assez fastidieux.

Cette fonction permet de nettoyer une longue liste de fichiers, de sorte que les arguments seraient nourris au moment de l'exécution et le point soit à des chaînes (pour le paramètre txt) ou les noms de fichiers (pour les paramètres file_input, file_output). J'ai pensé à utiliser peut-être des décorateurs, mais je ne sais pas comment je le ferais.

Une méthode que je l'ai pensé est d'alimenter en fonction des paramètres pour effectuer le nettoyage proprement dit, i.e. .:

def clean_text_with_cleaner(cleaner_func, txt=None, file_input=None, file_output=None): 
    if txt is None: 
     raw_txt = get_text_from_file(file_input) 
    else: 
     raw_txt = txt 

    cleaned_txt = cleaner_func(raw_txt) 

    if file_output is not None: 
     write_text_to_file(cleaned_txt, file_output) 
    return cleaned_txt 

Existe-t-il d'autres moyens qui sont plus élégantes que cela?

Répondre

1
def sample_func(txt=None, file_input=None, file_output=None): 
    raw_txt = txt or get_text_from_file(file_input) 
    cleaned_txt = re.sub(r'\n\n', '\n', raw_txt)  
    write_text_to_file(cleaned_txt, file_output) # handle file_output is None in this other function 
    return cleaned_txt 

pourrait être considéré comme propre par certains ... d'autres pourraient ne pas aimer cette méthode ...