嗨大家好!Pickle and exec in python
我必須做的是這樣的:
import pickle
exec "def f(): print 'Hi!'"
code = pickle.dumps(f)
print code
正如你所看到的,它工作正常。
但是,爲了避免定義全局變量(如如F在以前的代碼),我想要做這樣的事情:
import pickle
d = {}
exec "def f(): print 'Hi!'" in d
d['f']()
code = pickle.dumps(d['f'])
print code
它打印,它的意思是「你好!」 python認爲d ['f']是一個函數,但它不能醃製它。
你有什麼想法如何做到這一點? 我認爲這是因爲在前一種情況下,python知道在哪裏找到函數(它在'__main__'中),但在後一種情況下,它位於'__main__'字典中我認爲如果你能告訴python這個功能的真正模塊方向,它會工作。
謝謝!
_「爲了避免定義全局變量......」如果你甚至不願意在全局範圍內定義函數,你可能會把這個建議看得太遠。無論如何,'d'是全球性的,所以你在這裏並沒有真正獲得很多。 – Kevin
我的意思是當我使用exec()命令時,我不喜歡它,它定義了全局變量(例如,我沒有在程序中定義f,它是在使用exec之後定義的)。這就是爲什麼我必須將所有這些變量保留在字典中。這是通過在字典 –
中使用exec代碼完成的,我建議不要使用'exec'。只需定期寫下你的'def f():'。 – Kevin