プログラムに __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
私はここを見てきました: __import__() を使用して同じ python モジュールをフェイルセーフな方法で再インポートする
ここ:
そしてここ:
Python モジュールをアンロード (再ロード) するにはどうすればよいですか?
しかし、私は解決策を思いつくことができませんでした。どんな助けでも大歓迎です。ありがとう。
ポール
編集
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() に動的に渡すにはどうすればよいですか? ありがとう。