#python-3.x
#python-3.x
Вопрос:
У меня есть функция, которую я хочу запустить, только если 6 предыдущих функций вернулись True
или успешно. В настоящее время я делаю это с помощью следующего кода:
PATHS_GOOD = COUNT_EQUAL = ALL_FILES_PAIRED = VAL_PATHS_GOOD = VAL_COUNT_EQUAL = VAL_ALL_FILES_PAIRED = ALL_CLEAR = False
# Execute functions that change the state of COUNT_EQUAL etc
ALL_CLEAR = PATHS_GOOD and COUNT_EQUAL and ALL_FILES_PAIRED and VAL_PATHS_GOOD and VAL_COUNT_EQUAL and VAL_ALL_FILES_PAIRED
if ALL_CLEAR:
#Execute
Могу ли я просто использовать более короткие имена переменных? Конечно, но тогда никто другой не будет знать, за что отвечает эта переменная. Этот подход не будет хорошо масштабироваться, если мне придется продолжать добавлять дополнительные проверки. Итак, как я могу сделать это менее подробным и масштабируемым?
Комментарии:
1. Поместите значения в словарь.
Ответ №1:
Как правило, не рекомендуется передавать информацию путем изменения глобальных переменных. Вместо этого вы могли бы заставить функции возвращать a bool
на основе их успеха, а затем использовать all()
для проверки того, что все они вернулись True
:
if all((
paths_good(),
count_equal(),
all_files_paired(),
val_paths_good(),
val_count_equal(),
val_all_files_paired(),
)):
# execute
Или, в качестве альтернативы, просто используйте and
между каждым вызовом функции:
if (
paths_good()
and count_equal()
and all_files_paired()
and val_paths_good()
and val_count_equal()
and val_all_files_paired()
):
# execute
Комментарии:
1. @S.Ramjit Слишком большая тема для освещения здесь, лучшие хиты из поиска Google:
python why global variables are bad
должны объяснить это довольно хорошо 🙂