为什么“ for t [1] inererable”有效语法?

时间:2018-07-16 13:30:22

标签: python syntax

我的一个学生写了一个看起来像这样的代码(完全没有达到他的期望):

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

我之前从未见过,并且很确定它不会编译,但是确实可以编译t[1](即循环后t[1]设置为d )。

允许使用此语法有什么意义?有没有用例?对我而言,唯一“可接受的”语法应该是:

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

其中<variable_name>是标识符,没什么。

2 个答案:

答案 0 :(得分:5)

此循环:

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,2,3]
iterator = iter('abcd')
while True:
    try:
        t[1] = next(iterator)
    except StopIteration:
        break
    print('hello')

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

答案 1 :(得分:0)

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

for <container> in <iterable>:
    ...

并且t是一个列表(也称为容器容器),t[1]被Python解释为一个简单的容器,就像常规变量一样。