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