2011-05-10 29 views
0

我想制作一段代码,它将标题和链接关联到一个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 = "[email protected]" 
    gmail_pwd = "pw" 

    mail("[email protected]", 
     "Reddit Update", 
     Body) 

我要插入机身下方的列表中,并用身体来定义它..这样的:

list[i] = [Body] 

我在正确的轨道上?

+2

你可能要考虑改变' “%s%s%S%S” %(MessageTitle, “\ n”,” \ n“,MessageLink)''到'%s \ n \ n%s”%(MessageTitle,MessageLink)''。 – icktoofay 2011-05-10 23:47:25

回答

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