def is_probably_safe(x):
'''
Objects are probably "safe" (unlikly to change) if they are
-- immutable
-- functions
-- modules
Obviously, the latter two may change, but in practice it is likely
ok. Still, risky!
'''
if is_immutable(x): return True
if sys.version_info > (3,):
probably_fine = (\
types.LambdaType,
types.BuiltinMethodType,
types.BuiltinFunctionType,
types.FunctionType,
types.ModuleType,
types.MethodType)
else:
probably_fine = (\
types.LambdaType,
types.InstanceType,
types.NoneType,
types.NotImplementedType,
types.TypeType,
types.UnicodeType,
types.ComplexType,
types.ClassType,
types.BuiltinMethodType,
types.BuiltinFunctionType,
types.FunctionType,
types.ModuleType,
types.MethodType)
if type(x) in probably_fine: return True
if hasattr(x,'__call__'): return True
return False
评论列表
文章目录