isinstance(fn, type(lambda: 1))
有什么需要注意的地方吗?我知道this approach,但是我的备份不重要。
说明:
callable
不会削减-class
误报pickle
不能腌制lambda,必须在腌制对象之前将其过滤掉。这包括通过def
进行的局部函数定义,但是我上面的方法对此进行了介绍。lambda: 1
是否已被垃圾回收? (2):我的方法是否会检测到除lambda,函数和局部函数之外的任何对象?最小代码 :(我知道这里有一个较短的方法,但不是在完整的上下文中)
for key, val in obj.items():
if isinstance(val, type(lambda: 1)): # can't pickle lambdas
to_exclude.append(key)
to_save = {k:v for k,v in obj.items() if k not in to_exclude}
pickle.dump(to_save, file)
答案 0 :(得分:1)
除了创建lambda实例只是为了获取类型外,它应该没有问题。它将与def function
以及lambda匹配,这会使条件相对于您的意图有些误导。
如果仅需要知道fn是可调用对象(函数还是lambda),则应将其表示为callable(fn)
,以更好地传达您的意图。