Я хочу передать строку ключа в лямбда-функцию в качестве аргумента для mn в той же строке. Есть способ сделать это? Я не хочу снова набирать строку ключа.

switch = {
    'foo': lambda: bb.Data(ticker=self.ticker, key=self.key, func='yes', mn='foo'),
    'bar': lambda: bb.Data(ticker=self.ticker, key=self.key, mn='bar')
}
0
jason 18 Авг 2019 в 01:41

2 ответа

Лучший ответ

Вы можете создать словарь так:

switch = {
    key: lambda: do_something(key)
    for key in ['foo', 'bar']
}

Если вы хотите вызвать другую функцию для другого ключа, вам нужно что-то вроде этого:

def add_dict_item(a_dict, key):
    if key == 'foo':
        a_dict[key] = lambda: do_something(key)
    elif key == 'bar':
        a_dict[key] = lambda: do_something_else(key)

switch = {}
add_dict_item(switch, 'foo')
add_dict_item(switch, 'bar')
1
hek2mgl 17 Авг 2019 в 23:06

Вы можете определить функцию-член, так как вы использовали self. И использовать словарь понимания.

def mn_func(self, mn_item):
   return bb.Data(ticker=self.ticker, key=self.key, mn=mn_item)

list_of_items = ['foo', 'bar']
switch ={ mn_item:mn_func(mn_item) for mn_item in list_of_items}
1
kvivek 17 Авг 2019 в 23:03