是否可以编写一个在首次执行后替换自身的函数?
first.py:
from second import max
x = max(1,2,3)
y = max(4,5,6)
second.py:
def max(*args):
... #rewire references
return min(args)
我是否可以拨打max
第二次拨打内置电话,而第一次拨打来自 second.py 的电话?我尝试修改globals()
dict,但这没有任何效果,当然,也没有在自定义global max
函数中声明max
,即使重命名(后来再次命名为max)。
这有可能吗?我可以通过某种方式访问导入模块吗?
(在有人提出不可避免的评论之前:我知道这是一个坏主意,我不打算在生产中使用它,如果可能的话。我只是想知道它是否可行。 )
编辑:为了澄清,之后这应该是它在REPL中的样子:
>>> from second import *
>>> max
<function max at 0x10e501400>
>>> x = max(1,2,3)
>>> max
<built-in function max>
答案 0 :(得分:1)
在文件maxtest.py中:
import __builtin__
_max = __builtin__.max
def max(*args):
print "Inside non standard max function"
__builtin__.max = _max
return min(args)
__builtin__.max = max
在文件maxtest2.py中:
import maxtest
x = max(1, 2, 3)
y = max(4, 5, 6)
运行python maxtest2.py会产生:
Inside non standard max function
请注意,输出仅发生一次,表示第二次调用已更改最大功能。