import getpass, imaplib
M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()
该代码从文档here中提取(滚动到页面底部)。我认为for循环内的数据分配将覆盖for循环开始之前所做的数据分配。由于python中的作用域是最接近的函数,类或模块;数据变量赋值将覆盖原始赋值。
因此,for循环使用的数据实际上是第一次运行时在for循环内设置的数据。这是代码中的错误吗?应该将内部变量重命名为data1吗?
答案 0 :(得分:1)
我认为可以,但是可能不够可读,或者您可以将其重命名为data1
问题在于data[0].split()
返回一个新对象,并且for循环在这里使用该匿名对象,该匿名对象不会被内部分配覆盖。
答案 1 :(得分:0)
这似乎不是错误。看起来他们只是在初始化变量,然后在for循环的第一个循环上对其进行更新。您说对了,for循环使用的数据是循环内的一组数据,这是正确的。