python set仅返回第一项

时间:2018-07-03 07:34:14

标签: python

此脚本的目的是向收件人列表发送电子邮件,该代码仅适用于第一个收件人,而对其余列表则永远不起作用。

代码如下:

class email:
    def __init__(self, sender, subject, message):
        self.sender = sender
        self.subject = subject
        self.message = message



    def receivers(self):
        receivers = ('adam', 'tom', 'mel')
        for receiver in receivers:
            return receiver



    def send(self):
        print('we send email from'.capitalize(), self.sender, 'to', email.receivers().title(), 'and the subject is',
              self.subject, 'finally the massage is', self.message)


email = email('sayed', 'morning message', 'wake up man')
email.send()

结果如下:

We send email from sayed to Adam and the subject is morning message finally the massage is wake up man

4 个答案:

答案 0 :(得分:4)

无论何时执行return语句,都会立即退出当前函数。使用return receivers(不循环)返回整个集合而不是仅返回一个项目,或使用yield receiver创建一个generator(如果选择后者,请阅读链接的答案了解什么是发电机)。

样式建议:将函数名称重新用作该函数内部的变量名称可能会使读取您的代码的人感到困惑。

答案 1 :(得分:1)

Return一旦返回值就退出该函数。就像break

得到该结果,因为一旦返回第一个值(“ adam”),便可以通过return退出该函数。您应该只return整个元组:return receivers,然后在send(self)中:

receivers = email.receivers()
for receiver in receivers:
    print('we send email from'.capitalize(), self.sender, 'to', receiver.title(), 'and the subject is',
              self.subject, 'finally the massage is', self.message)

答案 2 :(得分:0)

您的接收器功能在返回第一个接收器之后停止,我建议返回该集合并对其进行迭代

text

答案 3 :(得分:0)

如果接收方的元组是静态的,则将该元组移为class属性:

class Email: # convenient
  _receivers = ('adam', 'tom', 'mel') # _ - to be protected