isinstance(lambda,type(lambda))是否正确?

时间:2020-03-11 14:17:28

标签: python

isinstance(fn, type(lambda: 1))有什么需要注意的地方吗?我知道this approach,但是我的备份不重要。

说明

  • callable不会削减-class误报
  • 上下文pickle不能腌制lambda,必须在腌制对象之前将其过滤掉。这包括通过def进行的局部函数定义,但是我上面的方法对此进行了介绍。
  • 问题目的:了解可能的(1)记忆,(2)正确性含义。 (1):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)

1 个答案:

答案 0 :(得分:1)

除了创建lambda实例只是为了获取类型外,它应该没有问题。它将与def function以及lambda匹配,这会使条件相对于您的意图有些误导。

如果仅需要知道fn是可调用对象(函数还是lambda),则应将其表示为callable(fn),以更好地传达您的意图。