Воспользуетесь ли вы преимуществами этих функций Python, которые могут помочь сделать ваш код более понятным?
Читаемость кода - это не только сокращение кода. Речь идет об уменьшении интеллектуального бремени понимания того, что делает ваш код и как он это делает.
Вот несколько общих практических правил: явное лучше неявного, четкое лучше короткого и не повторяйся (СУХОЙ).
Имея это в виду, вот три (плюс один бонус!) Примера ситуаций, в которых отказ от оператора if может помочь сделать ваш код более читабельным. Они есть:
- Проверка на равенство с более чем одним возможным значением
- Выбор одного значения из множества возможных значений
- Динамический выбор одной функции для выполнения из набора нескольких возможных функций (бонус: с настраиваемыми аргументами)
1. Проверка на равенство с более чем одним значением? Используйте 1_!
Не очень хороший способ:
Лучший способ:
Почему лучше:
- По мере увеличения количества допустимых значений «не очень хороший» способ растянет ваш оператор if.
- Хотите изменить допустимые значения? Просто измените список.
- Назначив список допустимых значений переменной, вы также можете использовать его в другом месте своего кода. Например, это упрощает написание утверждений:
2. Есть много "elifs" для вашего оператора if? Используй словарь!
Не очень хороший способ:
Лучший способ:
Почему лучше:
- По мере увеличения количества допустимых значений «не очень хороший» способ растянет ваш оператор if.
- Сделали другое возможное значение? Просто добавь в словарь!
- Допустимые значения могут быть обнаружены с первого взгляда, а также, возможно, использованы в другом месте с помощью
info_dict.keys()
.
3. Хотите выполнять функцию динамически? Используйте словарь (снова)!
Не очень хороший способ:
Лучший способ:
Почему лучше:
- По мере увеличения числа возможных функций «не очень хороший» способ растянет ваш оператор if.
- Сделали еще одну возможную операцию? Просто добавь в словарь!
- Разрешенные операции могут быть обнаружены с первого взгляда, а также, возможно, использованы где-то еще с помощью
ops.keys()
.
Бонус: динамические функции с настраиваемыми аргументами
А как насчет того, чтобы каждая из возможных функций имела свой собственный набор аргументов?
Решение - распаковка словаря . Во-первых, что на самом деле делает распаковка словаря? В приведенном ниже коде строки 6 и 14 делают то же самое, с той лишь разницей, что строка 14 использует распаковку словаря.
Теперь нам нужно только слегка изменить наш предыдущий пример, чтобы учесть любые настраиваемые аргументы в наших динамических функциях:
Этот подход может быть полезен в ситуациях, когда вы хотите, чтобы ваша программа была легко настраиваемой. Например, мы можем видеть, что в приведенном выше коде последовательность операций, указанная в функции example_usage()
, могла быть вместо этого определена в файле конфигурации, таком как JSON или YAML.
Если вы в настоящее время работаете над проектом машинного обучения, возможно, вы захотите прочитать о моих стратегиях конфигурации в другой моей статье !:
Спасибо за прочтение! Когда дело доходит до читабельности кода, должны быть только рекомендации, а не жесткие правила. Доверьтесь своему чутью или спросите другого разработчика, насколько легко понять ваш код.
Что вы думаете об этих альтернативах операторам if? Оставляйте свои комментарии ниже!