Существует ли краткий способ переключения между «любым» и «всем» в состоянии в функции? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть функция, где я проверяю несколько списков параметров:

def check_function(some_input_parameters):
  #do_smth
  ...

  if all(bet_res[i] for i in res_number_list):
     good_row_list.append(row_dict)
  else:
     bad_row_list.append(row_dict)
  #do_smth
  ...

В некоторых случаях мне нужно «все», а иногда мне нужно «любое». Есть хороший короткий способ изменить все / любой по некоторому входному параметру? Я могу сделать что-то подобное, но мне это не нравится:

if any_all_flag = 'all':
        if all(bet_res[i] for i in res_number_list):
            good_row_list.append(row_dict)
        else:
            bad_row_list.append(row_dict)
else:
        if any(bet_res[i] for i in res_number_list):
            good_row_list.append(row_dict)
        else:
            bad_row_list.append(row_dict)

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Просто используйте функтор (переменная, которая содержит функцию):

if any_all_flag = 'all':
  my_functor = all
else:
  my_functor = any

if my_functor(bet_res[i] for i in res_number_list):
  good_row_list.append(row_dict)
else:
  bad_row_list.append(row_dict)
0 голосов
/ 11 мая 2018

Функции all и any принимают итераторы, поэтому вам не нужно снова циклически повторять итератор, если только вы не хотите применять функции к определенному количеству элементов.Один из аккуратных подходов здесь - использовать словарь, подобный следующему, для сохранения функции и их имен, чтобы вы могли получить доступ к соответствующей функции с помощью простого индексирования.

functions = {'all': all,
             'any': any}

if functions[any_all_flag](bet_res):
    # do stuff
...