MST

星途 面试题库

面试题:Python闭包在实际项目中的优化应用

在一个Web应用开发场景中,需要频繁计算某个特定用户的访问次数并记录。假设已经有一个获取用户ID的函数`get_user_id()`,请使用闭包的方式实现一个计数器函数,该函数每次调用时,能针对特定用户ID进行访问次数累加,并能返回当前访问次数。同时,阐述闭包在此场景下相较于普通函数实现方式的优势。
27.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

代码实现

def visit_counter():
    user_count = {}
    def inner():
        user_id = get_user_id()
        if user_id not in user_count:
            user_count[user_id] = 1
        else:
            user_count[user_id] += 1
        return user_count[user_id]
    return inner

counter = visit_counter()

闭包优势

  1. 数据隐藏与封装:闭包可以将user_count这个用于记录用户访问次数的字典隐藏在内部,外部无法直接访问和修改,提高了数据的安全性。相比之下,普通函数实现可能需要将这个计数数据暴露在全局作用域,容易被误操作。
  2. 状态保持:闭包能够记住其定义时的环境,每次调用counter函数时,user_count的状态会被保留,持续记录特定用户的访问次数。普通函数如果不借助全局变量,很难做到每次调用都保持这种状态。