Python 为什么iterable中的'for t[1]是有效的语法?

Python 为什么iterable中的'for t[1]是有效的语法?,python,syntax,Python,Syntax,我的一个学生写了一个这样的代码(根本没有实现他所期望的): 我以前从未见过它,并且非常确定它不会编译,但它确实编译了,并且它正在修改t[1](也就是说t[1]在循环后被设置为d) 允许这种语法有什么意义?有任何用例吗?对我来说,唯一“可接受”的语法应该是: for <variable_name> in <iterable>: ... 用于: ... 其中,是一个标识符,其他什么都没有。我认为Python将迭代语法解释为 for <container&g

我的一个学生写了一个这样的代码(根本没有实现他所期望的):

我以前从未见过它,并且非常确定它不会编译,但它确实编译了,并且它正在修改
t[1]
(也就是说
t[1]
在循环后被设置为
d

允许这种语法有什么意义?有任何用例吗?对我来说,唯一“可接受”的语法应该是:

for <variable_name> in <iterable>:
     ...
用于:
...

其中,
是一个标识符,其他什么都没有。

我认为Python将迭代语法解释为

for <container> in <iterable>:
    ...
用于:
...
t
作为一个列表(也称为容器的容器),
t[1]
被Python解释为一个简单的容器,就像一个正则变量一样。

这个循环:

for x in range(5):
   print(x)
可翻译为:

iterator = iter(range(5))
while True:
    try:
        x = next(iterator)
    except StopIteration:
        break
    print(x)

遵循相同的概念,此循环也将有效:

t = [1,2,3]
for t[1] in 'abcd':
   print('hello')


最终结果将是
t==[1,'d',3]

对于
for
LHS可以是任何类型的可分配的,包括“复杂”的东西,例如x,*y,z in…
,那么为什么不
t[1]
?(还有,我记得很久以前的同一个问题,但现在找不到了……搜索这种问题不容易)错。FWIW,“我想……”引入了一个假设,而不是一个恰当的技术答案。说某人错了而不提供任何证据/来源也不是更好。对不起,我被你使用的这个词误导了“container”(通常用于dict、list等,“包含”其他对象的IOW数据类型)。看起来您指的是“variable”或类似的东西。请注意,在Python中,变量不“包含”值-它不是内存地址,只是绑定到值的名称。。。
t = [1,2,3]
for t[1] in 'abcd':
   print('hello')
t = [1,2,3]
iterator = iter('abcd')
while True:
    try:
        t[1] = next(iterator)
    except StopIteration:
        break
    print('hello')