A volte si desidera importare uno dei tanti file di configurazione, ognuno dei quali aveva valori diversi per le stesse variabili denominate, dicts, ecc
Non si può semplicemente fare questo:
def mother_function(module, *args, **kwargs):
from module import variable
return variable
def call_home_to_mamma():
import module_42
return mother_function(module_42)
La spiegazione del motivo per cui questo non funziona è superiore al mio livello di retribuzione, e comporta chiusure e spazi dei nomi. Quello che ho trovato lavorato è stato quello di chiamare la funzione madre con 'module_name' come un argomento stringa, quindi dyamically importare la variabile particolare quando ho davvero bisogno:
def mother_function(module_name, *args, **kwargs):
exec('from %s import %s' % (module_name, variable))
variable = eval(variable)
return variable
def call_home_to_mamma():
import module_42
return mother_function(module_42.__name__)
Bingo .... avete importazione Dyamic di qualsiasi variabile vuoi, da un modulo importato come determinato in fase di esecuzione.
fonte
2013-05-03 03:57:08
+1 Sto usando __builtins__ piuttosto che globals() in modo da poter usare questo codice da un altro modulo. –