2017-08-18 32 views
-3

我不知道如果我能像有什麼方法可以在列表理解中返回值?

[return role_ for role_ in self.roles if role.name==parameter] 

當然這是行不通的列表理解返回值。目前,我不得不使用經典的for循環

for role_ in self.roles: 
    if role_.name == parameter: 
     return role_ 
+0

你只是在尋找與你的「經典for循環」相當的1-liner? – jacoblaw

+2

不,因爲列表理解在那裏產生一個列表。確切地說,是 –

+0

。我上面的代碼是「無法訪問」。 –

回答

6

使用next() function與發電機的表達:

return next((role_ for role_ in self.roles if role_.name == parameter), None) 

這將返回第一個匹配的role_值,或者如果沒有這樣的值,則返回None

你不能使用列表理解,不,因爲你是不產生列表

5

最接近的事是與發電機表達主叫next

return next(role_ for role_ in self.roles if role_.name==parameter) 
5

不。列表理解的目的是建立一個列表,而不是保存代碼行。

由於您不想要列表作爲結果,因此列表理解是該作業的錯誤工具。一個循環非常好。

+0

好的,這是我對列表理解的理解。 –

相關問題