xxx object is not callable可能的原因之一【恢复被覆盖的python内置函数】

时间:2019-02-19
本文章向大家介绍xxx object is not callable可能的原因之一【恢复被覆盖的python内置函数】,主要包括xxx object is not callable可能的原因之一【恢复被覆盖的python内置函数】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天遇到的报错其实是:

'list' object is not callable

输出list一看,果然发现list被其他变量覆盖了



解决方法

两个:

1. del list


这里就要讲到python的del和c++的del的不同了。前者是删除变量(从全局字典里面移除),后者是删除该变量指向的内存。
那为什么del list以后list会恢复到原本的内置函数的地址呢?

我的理解是:(如果误解,欢迎指正!)
__builtins___本身代表一个命名空间,全局命名空间是优先于它的,全局里的list删掉了,如果__builtsin__这个命名空间里面有,就默认使用这个命名空间里面的。(builtins__来自__builtin module(Python 2,注意缺少s),或builtins module(Python 3,带s但没有下划线).)

说到这儿,可能很多人会好奇python的GC机制,可以看下这个博文https://juejin.im/post/5b34b117f265da59a50b2fbe



2. list=builtins.list


原理含在1里面啦,不过还是建议用1(用2也问题不大hh