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')