for 循环内的变量范围(imaplib 库文档)

Variable scope inside for loop (imaplib library documentation)

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 中的作用域是最近的函数,class 或模块;数据变量赋值将覆盖原来的赋值。

所以for循环使用的数据实际上是循环运行第一次循环时在for循环内部设置的数据。这是代码中的错误吗?是否应该将内部变量重命名为 data1?

看来不是错误。看起来他们只是初始化变量,然后在 for 循环的第一个循环中更新它。你说的没错,for循环使用的数据是循环内部设置的,看起来是故意的。

我认为还可以,但可能不够可读,或者重命名为data1

更清楚

问题是 data[0].split() returns 一个新对象,这里的 for 循环正在使用不会被内部赋值覆盖的匿名对象。