我有以下代码:
a = [0,1,2,3]
for a[-1] in a:
print(a[-1])
Run Code Online (Sandbox Code Playgroud)
输出为:
0
1
2
2
Run Code Online (Sandbox Code Playgroud)
我对为什么列表索引可以用作for循环中的索引变量感到困惑。
在CPython 2.7.10和3.4.3以及PyPy 2.6.0(Python 2.7.9)中,在for循环中使用表达式(或它们的某些子集)作为名称列表显然是合法的.这是一个典型的for循环:
>>> for a in [1]: pass
...
>>> a
1
Run Code Online (Sandbox Code Playgroud)
但您也可以使用对象中的属性:
>>> class Obj(object): pass
...
>>> obj = Obj()
>>> for obj.b in [1]: pass
...
>>> obj.b
1
Run Code Online (Sandbox Code Playgroud)
你甚至可以使用表达式中的属性:
>>> for Obj().c in [1]: pass
...
Run Code Online (Sandbox Code Playgroud)
但并非所有表达式都可行:
>>> for (True and obj.d) in [1]: pass
...
File "<stdin>", line 1
SyntaxError: can't assign to operator
Run Code Online (Sandbox Code Playgroud)
但只要属性在外面,他们就会这样做吗?
>>> for (True and obj).e in [1]: pass
...
>>> obj.e
1
Run Code Online (Sandbox Code Playgroud)
或者可以分配什么?
>>> for {}['f'] in [1]: …Run Code Online (Sandbox Code Playgroud)