for 循环
是一个通用的序列迭代器,可以遍历任何有序的序列对象内的元素,可用于字符串,列表,元组以及其他内置可迭代对象
for <target> in <object>:
<statements>
if <test>: break
if <test>: continue
else:
<statements>
你可以把for循环看成是解包,而具体是如何解包的,这个就要看next方法,它是具体怎么实现的(针对自定义对象)。
对于内置对象的话,解包一般就是把一个大的单元,按照分割符进行划分,然后我们用i来储存一小块,然后进行循环处理
>>> for i in 'spam': #比字符串小的单元就是字符了
... print(i,end=', ')
...
s, p, a, m,
>>> for i in ((1,2),(3,4)): #嵌套元组,然后把元组看成一个整体,或则理解为按照内部分割符来划分
... print(i, end=', ')
...
(1, 2), (3, 4),
>>> for i in (1,2): #单个元组的话,按照内部分割符进行划分
... print(i, end=', ')
...
1, 2,
通过下面的例子,你会发现它实际上关键还是赋值的形式,与我们前面说学的区别就是它后面时一个序列,然后我们会以,为分隔符,一次用一段进行赋值。
>>> D={'a':1, 'b':2, 'c':3}
>>> for k in D:
... print(k, '=>', D[k])
...
('a', '=>', 1)
('c', '=>', 3)
('b', '=>', 2)
>>> list(D.items())
[('a', 1), ('c', 3), ('b', 2)]
>>> for (k,v) in D.items():
... print(k, '=>', v)
...
('a', '=>', 1)
('c', '=>', 3)
('b', '=>', 2)
>>> for ((a,b), c) in [((1,2),3),((4,5),6)]:
... print(a,b,c)
...
(1, 2, 3)
(4, 5, 6)
Python 3的扩展赋值:关键也就是*的引入
>>> for (a,*b,c) in [(1,2,3,4),(5,6,7,8)]:
... print(a,b,c)
...
1 [2,3] 4
5 [6,7] 8
>>> for all in [(1,2,3,4),(5,6,7,8)]: #对比上面字典的时候,k为啥就只是一个值'a'?为啥现在为整个元组
... a,b,c = all[0],all[1:3],all[3]
... print(a,b,c)
...
1 (2,3) 4
5 (6,7) 8
佐证:for 循环的列表,会以逗号为界限,每次取出一组然后进行处理>>> items = ["aaa", 111, (4,5),2.1]
>>> tests = [(4,5), 3.4]
>>> for k in tests: #k 第一次值为(4,5)跟上面的all一样都是一次乘装一个分隔单元
... if k in items:
... print(k, "was found")
... else:
... print(k, "not found")
...
((4, 5), 'was found')
(3.4, 'not found')