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