WEB开发网
开发学院软件开发Python [Python 学习笔记] 11: Control Flow 阅读

[Python 学习笔记] 11: Control Flow

 2009-10-13 00:00:00 来源:WEB开发网   
核心提示:if...elif...else>>>deftest(i):if(i>10)and(i<20):print"a...."elif(i>=20)or(i<=10):print"b..."else:print"c..."f

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() 创建一个很大的列表时,你会发现内存一下涨了很多~~~~~ [Python 学习笔记] 11: Control Flow ,这时候你应该用 xrange() 来代替。虽然这两者从表面看没什么区别,但实际上他们生成的结果类型并不一样。

>>> type(range(10))
<type 'list'>
>>> type(xrange(10))
<type 'xrange'>

Tags:Python 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接