python学习笔记flow:[Python 学习笔记] 11: Control Flow



  ...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'>


Tags:  python学习笔记flow

延伸阅读

最新评论

发表评论