Найти - Пользователи
Полная версия: Две функции и одно условие (не могу понять)
Начало » Python для новичков » Две функции и одно условие (не могу понять)
1
RADIOFARO
Да, в Питоне почти ни бум-бум.
Экспериментирую со скриптами для Блендера
Встретил такое:

 map((function1, function2)[getattr(self, "enable_z")], elements_list)
Что есть map примерно понятно.
В нем первый аргумент должна быть функция.
Вот и не понимаю этот аргумент.
Точнее:
 (function1, function2)[getattr(self, "enable_z")]
Что здесь происходит?
function1 и function2 функции
getattr получит значение булевого параметра
Это будет запускать одну из функций в зависимости от полученного булевого значения?

Гугление описывает стандартное применение функций и не помогает.

FishHook
RADIOFARO
getattr получит значение булевого параметра
Это старый-старый трюк
булевый тип в питоне можно использовать как индекс кортежа или списка, False дает нулевой элемент, True первый. Такую конструкцию лучше не использовать, а применять стандартный аналог тернарного оператора

 function2 if getattr(self, "enable_z") else function1
RADIOFARO
Спасибо, FishHook.
Было у меня так написано.
        if self.enable_z:
            list( map(function2, elements_list))
        else:
            list( map(function1, elements_list))
Только функции поменял местами (function1 <—> function2)
и стало работать как нужно.

Когда работало с артефактами, подумал, что не правильно понял эту конструкцию.
py.user.next
RADIOFARO
В нем первый аргумент должна быть функция.
Вот и не понимаю этот аргумент.
Автор решил сократить код, в результате нарушил читаемость. Он плохо написал, поэтому ты не понимаешь. Это и есть говнокод - когда работает всё правильно, но в коде надо разбираться часами.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB