Python 学习笔记 12.流程控制(Control Flow)

转载自:http://www.xwy2.com/article.asp?id=121

if...elif...else

Code
>>>>>> def test(i):
if 0<i<10:
print "small.."
elif 10<=i<20:
print "midle.."
elif 20<=i<30:
print "large.."
else:
print "invalid.."


>>>>>> test(15)
midle..

for...in...

Code
>>>>>> for i in range(4):
print i


0
1
2
3
>>>>>>
>>>>>> for k, v in {1:"a", 2: "b", 3:"m"}.items():
print "%d=%s"%(k,v)


1=a
2=b
3=m
>>>>>>

当然,我们可以用 range() 来实现 C# for(++)/for(--) 的效果。

Code
>>>>>> for i in range(len(a)):
print "%d: %s"%(i, a[i])


0: a
1: b
2: c
>>>>>>
>>>>>> for i in range(len(a)-1, -1, -1):
print "%d: %s"%(i, a[i])


2: c
1: b
0: a
>>>>>>

while

Code
>>>>>> while i < 5:
print i
i
=i+1;


0
1
2
3
4
>>>>>>
>>>>>> while True:
print i
i
+=1;
if i == 5:break


0
1
2
3
4
>>>>>>

continue, break

和大多数语言一样,Python 循环同样支持 continue 和 break。这没什么好说的。

Changing horses in midstream

我们看一个有意思的例子。

Code
>>>>>> a=range(3)
>>>>>> for i in a:
print i
a
=range(10)


0
1
2
>>>>>>

你会发现在循环体内部对 a 的修改并没有起到作用,为什么会这样呢?改一下代码就明白了。

Code
>>>>>> a=range(3)
>>>>>> hex(id(a))
'0xdc36e8'
>>>>>> for i in a:
print i
a
=range(19)
print(id(a))


0
14411376
1
14431896
2
14386240
>>>>>>

哦~~~ 原来内部所谓修改的 a 完全是一个新的对象,自然不会影响到循环体本身了。这和 Python 变量的作用范围有关。

xrange()

如果你用 range() 创建一个很大的列表时,你会发现内存一下涨了很多~~~~~ ,这时候你应该用 xrange() 来代替。虽然这两者从表面看没什么区别,但实际上他们生成的结果类型并不一样。

Code
>>>>>> type(range(10))
<type 'list'>
>>>>>> type(xrange(10))
<type 'xrange'>
>>>>>>
原文地址:https://www.cnblogs.com/sislcb/p/1285997.html