Присвойте значение строке, совпадающей с именем переменной в Python - PullRequest
1 голос
/ 31 января 2011

Предположим, у меня есть,

class example(object)
    def __init__(var1 = 10, var2 = 15, var3 = 5)
        do a few things here 

    Other methods here

Есть другие классы, которые не имеют отношения к вопросу.

Чтобы изучить поведение системы, я изменяю входные данные в методе __init__ выше, по одному за раз. У меня есть другая функция start_simulation, которая принимает имя входа, которое я хочу изменить как string, и его возможные значения. (Он использует это имя и значения для создания имен файлов, в которых хранятся результаты выполнения). Например, у меня есть

def start_simulation(var_under_study, var_under_study_values):
    '''type of var_under_study: string''' 
    for value in var_under_study_values:

        example_instance = example(var_under_study = value) 
        # I have to specify the var_under_study manually in this line. 
        # If it is var1, I have to manually type var1 here. 
        # I want to know if there is a way so that once I specify 
        # the string var_under_study in the argument of the 
        # start_simulation function, this line takes that and sets the
        # variable with that name to the specified value.

        other stuff here

Я вызываю эту функцию в другом месте, написав

start_simulation(var_under_study = 'var1', var_under_study_values = [5, 15, 20])

Теперь, если я хочу изучить эффекты var2, я должен указать это в аргументах функции start_simulation:

start_simulation(var_under_study = 'var2', var_under_study_values = [5, 15, 20])

но мне также нужно вернуться туда, где определена функция, и изменить аргумент в строке example_instance = example(var_under_study = value). Например, вместо example_instance = example(var1 = value) я должен написать:

example_instance = example(var2 = value)

Есть ли способ, которым я могу просто указать переменную в

start_simulation(var_under_study = 'var2', var_under_study_values = [5, 15, 20])

и имеют

example_instance = example(var1 = value)

строка учитывает это.

Спасибо за вашу помощь. Пожалуйста, дайте мне знать, если я могу уточнить. Я стараюсь не менять одну и ту же / похожую вещь в нескольких местах, чтобы не получить неправильные результаты, потому что я забыл ее где-то изменить.

1 Ответ

3 голосов
/ 31 января 2011

Если я вас правильно понимаю, вы хотите указать имя параметра, который должен быть установлен динамически. Вы можете использовать словарь для распаковки :

example_instance = example(**{var_under_study: value})

Это передаст содержимое словаря в качестве параметров функции, где ключи - это имена параметров, а значения - значения:)

Примечание: Имена классов следует начинать с заглавной буквы, чтобы их было легче отличить от функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...