#python
#python
Вопрос:
Я хочу создать фрагмент кода, который извлекает заголовок и ссылку из RSS-канала и компилирует его в переменную, которую затем можно использовать в теле сообщения. Моя проблема в том, что Body переопределяется каждый раз, когда я извлекаю информацию из RSS. Я очень новичок в программировании и 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. Возможно, вы захотите рассмотреть возможность изменения
"%s%s%s%s" % (MessageTitle,"n","n", MessageLink)
на"%snn%s" % (MessageTitle, MessageLink)
.
Ответ №1:
Существует множество шаблонов проектирования, которые вы можете рассмотреть для использования. Я продемонстрирую несколько, где вам не нужно использовать [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__()