繁体   English   中英

python set仅返回第一项

[英]python set returns the first item only

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

这是代码:

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

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

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

当返回值时, 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)

您的接收器函数在返回第一个接收器后停止,建议返回集合并对其进行迭代

def receivers(self):
    return ('adam', 'tom', 'mel')

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM