如何避免重复我的代码

How to avoid repetion with my code

我编写了一个代码,可以从两个文件中提取所有单词,并且只提取 returns 两个文件中的单词。 然而,我做了一些重复,这被认为不是一个好的风格,所以我想知道是否可以用我的代码避免这种情况?

import re

def print_common_words(filename_1, filename_2):

    try:

        input_file = open(filename_1, 'r')
        source_string = input_file.read().lower()
        input_file.close()
        all_words1 = set(re.findall('[a-zA-Z]+', source_string))   

        input_file = open(filename_2, 'r')                         #Repetition
        source_string = input_file.read().lower()                  #Repetition
        input_file.close()                                         #Repetition
        all_words2 = set(re.findall('[a-zA-Z]+', source_string))   #Repetition

        intersection_list = all_words1.intersection(all_words2)
        union_list = []
        for word in intersection_list:
            union_list += [word]
            union_list.sort()
        for i in union_list:
            print(i)


    except FileNotFoundError:
        print("A file could not be found.")

使用一种方法来提取重复代码。

def get_file(file):
    input_file = open(file, 'r')
    source_string = input_file.read().lower()
    input_file.close()
    return set(re.findall('[a-zA-Z]+', source_string))   

这样称呼它:

all_words1 = get_file(filename_1)
all_words2 = get_file(filename_2)

例如:

all_words1 = get_file(filename_1)
all_words2 = get_file(filename_2)
intersection_list = all_words1.intersection(all_words2)
union_list = []
for word in intersection_list:
    union_list += [word]
    union_list.sort()
for i in union_list:
    print(i)