2016-08-14 4 views
1

Мне интересно, как сделать код более эффективным в Python, мне нужно выполнить действие, которое может иметь или не иметь полезную нагрузку в зависимости от длины список.Python - передать переменную в лямбда, если она существует

Прямо сейчас, я использую оператор if, чтобы определить, есть ли полезная нагрузка. Есть ли лучший или более чистый способ найти это?

    #If payload, execute action with it 
        if(len(data) > 1): 
         action= mec.action(data[1]) 
        #If no payload, then just execute action 
        else: 
         action= mec.action() 
        return action 
+1

Какую эффективность вы ищете? –

+0

идеально чистый код/​​лучшая логика. Я не думаю, что можно сделать это более эффективным с точки зрения времени? – ForeverLearning

+0

Это выглядит хорошо, как есть: если вы удалите комментарии, код по-прежнему понятен. Единственное, что я изменил, это оператор 'if': вам не нужны эти скобки. –

ответ

3

Код эффективен как есть - вместо оптимизации эффективности, сначала попробуйте оптимизировать для ясности. Если код тогда становится точкой доступа к производительности ... подумайте о том, как смотреть на эффективность.


Вспоминая, что return завершает функцию; это немного более чистая альтернатива:

# execute with payload if exists 
if(len(data) > 1): 
    return mec.action(data[1]) 
# execute without payload 
# this isn't reached if len(data) > 1 
return mec.action() 
+2

«сначала попробуйте оптимизировать для ясности». Это может занять много времени, чтобы учиться в программном обеспечении. * Умный код * - это проклятие сопровождающих, включая себя через 6 месяцев. Напишите чистый код, проконтролируйте производительность, затем оптимизируйте то, что нужно оптимизировать ... и прокомментируйте дерьмо из ничего даже смутно «умного». –

2

Python поставляется с синтаксисом vararg, который вы можете использовать для этого напрямую.

return mec.action(*data[1:]) 

(я предполагаю, что здесь, что data[2] года не имеет смысла, или вы могли бы использовать mec.action(*data[1:2]))

0

В этом случае просто использовать тройной оператор вроде этого:

return mec.action(data[1]) if(len(data) > 1) else mec.action() 

Надежда помогает!

Смежные вопросы