如何为Python自定义函数添加保存对象历史位置信息的功能以填充previous_position字段
实现Python函数保存上一次调用的对象位置信息
嘿,这个需求很好实现!核心思路就是让函数能记住上一次调用时的对象位置状态,Python里函数本身就是对象,咱们直接给它加个属性来存这个状态就行,不用搞全局变量或者额外的类,既简洁又干净。
先看修改后的完整代码:
def my_func(some_objects): # 首次调用时初始化函数的"记忆"属性,用来存上一次各对象的位置 if not hasattr(my_func, '_last_positions'): my_func._last_positions = {} objects_information = [] # 先临时存本次调用的所有对象位置,最后再更新"记忆" current_positions = {} for object_ in some_objects: object_information = {} object_information['name'] = object_.name object_information['position'] = object_.position # 从"记忆"里取上次的位置,没找到就设为None object_information['previous_position'] = my_func._last_positions.get(object_.name, None) objects_information.append(object_information) # 把当前对象的位置存到临时字典里 current_positions[object_.name] = object_.position # 更新函数的"记忆",替换成本次的位置信息 my_func._last_positions = current_positions return objects_information
关键细节解释:
- 函数属性存状态:用
my_func._last_positions这个函数专属的字典来记录每次调用后各name对应的position,首次调用时通过hasattr检查并初始化,避免报错。 - 获取历史位置:遍历对象时用
dict.get()方法,既安全又省事——如果这个name之前出现过就取上次的位置,没出现过就自动返回None,完美匹配你的需求。 - 更新记忆:先把本次所有对象的位置存到临时字典
current_positions,遍历完再替换_last_positions,这样不会在遍历过程中因为更新状态而影响当前的取值逻辑。
小提示:
- 如果需要重置函数的"记忆"(比如想清空之前的记录),直接执行
my_func._last_positions = {}或者del my_func._last_positions就可以了。 - 这个状态会一直保留到程序结束,除非你手动修改它,适合大多数场景。
内容的提问来源于stack exchange,提问作者adaniels
相关产品推荐
相关产品推荐

