假设我有一个文件
# func.py:
def function():
print 'Hello'
print 'World'
我在同一个目录中有另一个文件
# load.py:
import sys
import inspect
from func import function
我现在可以通过以下方式访问功能来源:
code = inspect.getsourcelines(sys.modules['function'])
无论如何我可以编辑要打印的函数行:
“Hello There World”而不只是“Hello World”?
我想通过编辑适当的功能在内存中完成所有操作。我正在通过读取源代码并在将其写入临时文件时编辑它并导入临时文件来完成相同的效果,但我想完全避免使用外部文件。
答案 0 :(得分:0)
这实际上并没有编辑该函数,但它确实用一个没有临时文件的新函数替换了该模块上的函数(这可能已经足够了):
import inspect
import func
code = inspect.getsourcelines(func.function)
lines = code[0]
lines.insert(2," print 'There'\n")
exec ''.join(lines)
func.function = function
答案 1 :(得分:0)
您是否考虑monkey patching而不是实际替换该代码。
import func
func.function()
def monkey_boy():
print "Monkey Boy"
func.function = monkey_boy
func.function()
给出:
Hello
World
Monkey Boy
答案 2 :(得分:0)
你想要一个带参数的函数:
def function(greeting='Hello', target='World'):
print greeting, target
在另一个档案中:
function() #prints Hello World
function(target='To The World') #prints Hello To The World
如果这不是你想要的,那么解释什么是用例,因为我很确定你会创建一个巨大的设计缺陷做你做的事情描述
正如我在评论中所述,自我修改程序在40年代/ 50年代使用,但之后却没有使用。