我的一个学生写了一个看起来像这样的代码(它完全没有达到他所期望的那样):
t = [1,2,3]
for t[1] in "abcd":
print("hello")
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个,并且很确定它不会编译,但它确实正在修改 t[1](在循环之后t[1]设置d).
允许这种语法有什么意义?有没有用例?对我来说,唯一"可接受的"语法应该是:
for <variable_name> in <iterable>:
...
Run Code Online (Sandbox Code Playgroud)
<variable_name>标识符在哪里,没有别的.
这个循环:
for x in range(5):
print(x)
Run Code Online (Sandbox Code Playgroud)
可以翻译成:
iterator = iter(range(5))
while True:
try:
x = next(iterator)
except StopIteration:
break
print(x)
Run Code Online (Sandbox Code Playgroud)
遵循相同的概念,这个循环也是有效的:
t = [1,2,3]
for t[1] in 'abcd':
print('hello')
Run Code Online (Sandbox Code Playgroud)
t = [1,2,3]
iterator = iter('abcd')
while True:
try:
t[1] = next(iterator)
except StopIteration:
break
print('hello')
Run Code Online (Sandbox Code Playgroud)
最终的结果是 t == [1, 'd', 3]