2014-02-04 6 views
1

У меня есть скрипт python, который начинается с импорта модуля python, который содержит данные. Очень упрощенный пример приведен ниже:Модули как аргументы функции

my_data1.py

bar = 10 
baz = [1, 5, 7] 
... 

my_func.py

from my_data1 import * 

def foo(): 
    ''' 
    function that uses the things defined in data (scalar, list, dicts, etc.) 
    in my_data 
    ''' 
    return [bar] + baz 

Это прекрасно работает для одного набора данных; однако, есть my_data1.py, ..., my_data36.py.

my_data36.py

bar = 31 
baz = [-1, 58, 8] 
... 

, что я хочу импортировать, а затем запустить foo() с этими данными. Я хотел сделать что-то вроде этого:

def foo(my_data): 
    from my_data import * 

results = [] 
for i in range(1,37): 
    results.append(foo('my_data{}'.format(i))) 

Это не работает. Идеи?

+0

Я мог бы импортировать определенные данные из 'my_data', если это делает это возможным, но я тоже не смог понять это. – cdhagmann

+0

Да и нет. Каждый из 36 имеет те же самые имена данных с разными значениями (то есть 'my_data1' имеет' bar = 3', 'my_data2' имеет' bar = 10' и 'foo()' использует 'bar') – cdhagmann

+0

Почему бы не получить «данные» путем чтения и разбора файла? –

ответ

2

Использование __import__. Он принимает строку как параметр, определяющий импортируемый модуль, и возвращает модуль, который затем вы можете передать в качестве аргумента в свои функции.

def processDataSet (module): 
    print (module.baz) 

for m in ['data1.py', 'data2.py', 'data69.py']: 
    processDataSet (__import__ (m)) 
Смежные вопросы