Ben yapılandırma dosyalarını işleme esnek basit ama yönlü olarak Python execfile()
fonksiyonunu kullanıyorum - temelde, fikir:Bir python modülünü bir dict içine içe aktarma (execfile() içinde globals olarak kullanmak için)?
# Evaluate the 'filename' file into the dictionary 'foo'.
foo = {}
execfile(filename, foo)
# Process all 'Bar' items in the dictionary.
for item in foo:
if isinstance(item, Bar):
# process item
Bu benim yapılandırma dosyası tanımına erişimi olduğunu gerektirir Bar
sınıfı. Bu basit örnekte, bu önemsiz; boş bir demeden ziyade foo = {'Bar' : Bar}
tanımlayabiliriz. Ancak, gerçek örnekte, yüklemek istediğim bir modülüm var. Zaten üst düzey dosyasında BarModule
ithal ettik Ancak
foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)
yüzden sadece doğrudan BarModule
tarafından tanımlanan şeylerin seti olarak foo
tanımlamak mümkün olmalıdır gibi görünüyor: o dair bariz sözdizimi Bu eval
ve import
zincirinden geçmek zorunda kalmadan.
Bunu yapmak için basit bir deyim var mı?
Değerlendirmeyi dosyalamıyorum; execfile demek istiyorsun? –
Python ifadeler ve ifadeler arasında bir ayrım yaptığı için, eval kullanımı açık fikir IMO değildir. eval bir ifadeyi değerlendirebilir (ör., eval ('2 + 2') '), exec ifadeler içindir (ör. 'exec' a = 2 + 2 '). ithalat bir ifadedir. –
@ ÉricAraujo: execfile demek istedim; düzenlemeler yapıldı. –