我一直在尝试为我的程序实现 __import__() 和 reload() ,但未能成功。我有一个字符串,我将其写入 .py 文件(模块),然后将其作为模块加载。然后我对该 .py 文件(模块)进行更改并写入它,但我似乎无法在新更新的模块中更改返回值。这是我的代码:
str1 = '''
def run():
return 10
'''
f = open('mycode.py','w')
f.write(str1)
f.close()
mymodule = __import__('mycode')
es = 'number = mymodule.run()'
exec(es)
print "number", number
str2 = '''
def run():
return 99
'''
f = open('mycode.py','w')
f.write(str2)
f.close()
mymodule = reload(mymodule)
mymodule = __import__('mycode')
es = 'number = mymodule.run()'
exec(es)
print "number", number
OUTPUT:
>> number 10
>> number 10 # should be 99
我看过这里:Re-import the same python module with __import__() in a fail-safe way
这里:
和这里:
但我无法想出解决方案。任何帮助,将不胜感激。谢谢。
保罗
编辑
我使用 exec(es) 的原因是因为如果我有多个参数,我想自定义 es。这是一个例子:
p = [2,1]
p2 = [3,4,5]
p3 = [100,200,300,500]
str1 = '''
def run(x,y):
return x + y
'''
with open('mycode.py','w') as f:
f.write(str)
import mycode as mymodule
# how do i do this dynamically,
# how to handle it when # of paremeters for run() change?
print mymodule.run(p[0],p[1]) # hard-coded parameter passing
# or, print mymodule.run(p[0],p3[1],p[2]) # if run() is changed
所以问题是我的 run() 可以有不同的参数。它可以是 run(x,y) 或 run(larry, moe, curly, hickory, dickory, dock)。如何动态地将多个参数传递给 run()?谢谢。