3

我正在编写代码以使用 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 "You have received a new message!"

如何将打印语句与上述结合起来?

4

1 回答 1

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]

但这是非常不符合标准的 - 请改用其他版本。

于 2013-03-28T09:02:27.350 回答