[Python 学习笔记] 11: Control Flow
2009-10-13 00:00:00 来源:WEB开发网if...elif...else
>>> def test(i):
if (i > 10) and (i < 20):
print "a...."
elif (i >= 20) or (i <= 10):
print "b..."
else:
print "c..."
for...in...
Python 的 for...in... 更像 C# 的 foreach 。
>>> for i in range(3):
print i
0
1
2
>>> for i in ("a", "b", "c"):
print i
a
b
c
>>> for k, v in {1:"a", 2:"b"}.items():
print "%d=%s" % (k, v)
1=a
2=b
当然,我们可以用 range() 来实现 C# for(++)/for(--) 的效果。
>>> a = ("a", "b", "c")
>>> 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
>>> i = 0
>>> while i < 10:
print i
i = i + 1
0
1
2
3
4
5
6
7
8
9
>>> while True:
print i
i = i + 1
if i > 20: break
10
11
12
13
14
15
16
17
18
19
20
continue, break
和大多数语言一样,Python 循环同样支持 continue 和 break。这没什么好说的。
Changing horses in midstream
我们看一个有意思的例子。
>>> a = range(3)
>>> for i in a:
print i
a = range(10)
0
1
2
你会发现在循环体内部对 a 的修改并没有起到作用,为什么会这样呢?改一下代码就明白了。
>>> a = range(3)
>>> hex(id(a))
'0xd37c38'
>>> for i in a:
print i
a = range(10)
print hex(id(a))
0
0xd375a8
1
0xd378f0
2
0xd372b0
哦~~~ 原来内部所谓修改的 a 完全是一个新的对象,自然不会影响到循环体本身了。这和 Python 变量的作用范围有关。
xrange()
如果你用 range() 创建一个很大的列表时,你会发现内存一下涨了很多~~~~~ ,这时候你应该用 xrange() 来代替。虽然这两者从表面看没什么区别,但实际上他们生成的结果类型并不一样。
>>> type(range(10))
<type 'list'>
>>> type(xrange(10))
<type 'xrange'>
赞助商链接