笔者了解到的内置函数被覆盖的情况有两类:
- 变量名使用内置函数名
- 使用加载的模块,如果该模块使用非常频繁,用*代替后可能出现内置函数被覆盖的情况,代码及问题如下(隐去部分文件路径):
from cvxpy import *
max(1, 2)
情况1的最简单恢复办法为修改变量名,后者相对复杂一些。笔者从网络上查到的方法有两种,大同小异:
import __builtin__
a = __builtin__.max(1,2)
a = builtin.max(1,2)
但是它们都报错了。
对于简单的内置函数,可以选择自己手动写一个不大可能被覆盖的内置函数副本,命名方式可以是最后一个小写字母的重复,如max变成maxx,min变成minn。
def minn(a, b):
if a < b:
return a
else:
return b
复杂的内置函数源码的详细解决方案目前笔者并未找到,总体思路是找到python内置函数的.py文件,找出对应函数并按照上述类似方式进行重命名。