from collections import Counter
from cppy.cp_util import *

'''
如果函数设计干净（没有修改全局变量），那么相同的调用参数就会得到必然相同的结果。
【缓存】把每次计算输入、输出存起来，如果后面有相同的任务（调用参数相同），就不用重复计算了。
'''

word_freq_cache = {}

def calculate_word_frequency(file_path):
    # 如果文件路径已经在缓存中，直接返回缓存的结果
    if file_path in word_freq_cache:
        return word_freq_cache[file_path]

    # 计算词频
    words = extract_file_words(file_path)
    word_counts = Counter(words)

    # 将结果存储到缓存中
    word_freq_cache[file_path] = word_counts.most_common(10)

    return word_freq_cache[file_path]

# 测试函数
top_10_words = calculate_word_frequency(testfilepath)
print_word_freqs(top_10_words)

'''
Python 提供了一个缓存调用函数的装饰器
import functools

# 使用 functools.lru_cache 缓存结果  
@functools.lru_cache(maxsize=None)  
def calculate_word_frequency(file_path):
    ...
    retrun result
'''    