使用不断变化的变量来定义列表

时间:2011-05-10 23:43:51

标签: python

我想创建一段代码来拉取标题并链接RSS源并将其编译成一个变量,然后可以在消息体中使用。我的问题是每次我从RSS中提取信息时都会重新定义Body。我是编程和python的新手,我觉得使用列表是最好的事情。

for i in range(3):

    MessageTitle = feed['items'][i].title
    MessageLink = " - ",feed['items'][i]['link']

    Body = "%s%s%s%s" % (MessageTitle,"\n","\n", MessageLink) #in unicode

    gmail_user = "user@gmail.com"
    gmail_pwd = "pw"

    mail("user@gmail.com",
         "Reddit Update",
         Body)

我打算在body下面插入列表,并使用body来定义它..类似于:

list[i] = [Body]

我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:3)

您可以考虑使用各种设计模式。我将演示一些您不需要使用[i]甚至:

的地方

累加器:

messages = []
for feedItem in feed['items']:
    message = {'title':..., ...}
    message['link'] = ...  # alternative
    messages += [message]   # or messages.append(data)

print(messages)

映射(在这种简单的情况下通常是最优雅的解决方案):

def makeMessage(feedItem):
    message = {'title':..., ...}
    return message

messages = [makeMessage(fi) for fi in feed['items']]
print(messages)

发生器:

def makeMessages(feedItems):
    for item in feedItems:
        message = {'title':..., ...}
        yield message

messages = list( makeMessages(feed['items']) )

无关的附录: 您甚至可以考虑为您的消息制作课程:

class Message(object):
    def __init__(self, title, link, body):
        self.title = title
        self.link = link
        self.body = body

    def __str__(self):
        return ...
    def __repr__(self):
        return self.__str__()