2016-08-14 32 views
1

我很好奇如何在Python中使代碼更高效,我必須執行一個動作,該動作可能有或沒有附加負載,具體取決於一個列表。Python - 將變量傳遞給lambda(如果存在的話)

現在,我使用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語句:你不需要這些括號。 – 2016-08-14 01:49:47

回答

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() 

希望它有助於!