2013-03-28 2 views
3

Я пишу код для отправки и получения сообщений на python с использованием GSM-модема.Сочетание операторов печати со списком в python

Всякий раз, когда получено новое сообщение, я получаю следующий ответ в списке x после чтения из объекта последовательного порта.

+CMTI: "SM",0 # Message notification with index 

Я опрос по этому показанию, и я использовал списковые, чтобы проверить, был ли я получил ответ выше

def poll(x): 
    regex=re.compile("\+CMTI:.......") 
    [m for l in x for m in [regex.search(l)] if m] 

Это, кажется, работает, однако я хочу, чтобы добавить print statement всякий раз, когда встречается совпадение, как

print "You have received a new message!" 

Как я могу совместить заявление печати с вышесказанным?

+1

Если вы не хотите взломать решение, используйте обычный цикл. – Volatility

+1

Вы понимаете, что не храните этот список? – Serdalis

+0

Вы не помещаете заявления печати в списки, это плохой питон. Кроме того, как @Serdalis сказал, что вы не храните список – jamylak

ответ

3

С нормальным for циклом, это можно сделать так:

def poll(x): 
    regex = re.compile("\+CMTI:.......") 
    lst = [] 
    for l in x: 
     for m in [regex.search(l)]: 
      if m: 
       lst.append(m) 
       print "You have received a new message!" 

Обратите внимание, что этот список не сохраненное в любом месте (вне области видимости функции) - возможно, вы хотите return его.


В качестве примечания, то Hacky решение:

from __future__ import print_function 
def poll(x): 
    regex = re.compile("\+CMTI:.......") 
    [(m, print("You have received a new message!"))[0] for l in x for m in [regex.search(l)] if m] 

Но это очень unpythonic - использовать другую версию вместо этого.

+0

Второй ответ грязный и не рекомендуется, почему «unpythonic»? Я бы подумал о замене вложенная петля с пониманием списка, как беспорядочная, как правило, считается более питоновой. Просто любопытно и пытается учиться. Спасибо. – TMWP

+0

@TMWP. Понимание списка само по себе не является тем, что неписано, это факт, что s [jamylak said] (http://stackoverflow.com/questions/15677429/combining-print-statements-with-list-comprehension-in-python/15677765?noredirect1_comment22255322_15677429), второй ответ - печать в пределах список понимание. Перечисления списков предназначались для создания списков, а не как сокращенного цикла. – Volatility

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