| 
  
   Size: 498 
  
  Comment:  
 | 
  
   Size: 3839 
  
  Comment:  
 | 
| Deletions are marked like this. | Additions are marked like this. | 
| Line 12: | Line 12: | 
| python 向来秉承简洁的设计原则,所以对于稍有编程经验的朋友来说, 下面这些过程控制的语法当不会陌生。  | 
python 向来秉承简洁的设计原则,在语法的设计上体现得尤为明显! 稍有编程经验的朋友对下面这些语法应当不会陌生。 对于许多读者来说,可能只需要注意两点,本章的内容就可以飞快得浏览过去了: 一是 python 以缩进控制作用范围并且缩进都以冒号开头; 二是所有这些过程控制语句都可以跟个 ``else`` 子句! ``if`` 语句后面跟 ``else`` 自不必说,连 ``for`` 、 ``while`` 语句也可以跟 ``else`` 子句! TODO: 关于不同语句中的 ``else``  | 
| Line 18: | Line 24: | 
| :: if a == b: print 'a 等于 b' else: print 'a 不等于 b' 也许你还需要更细致地控制: :: if a == b: print 'a 等于 b' elif a < b: print 'a 小于 b' elif a > b: print 'a 大于 b' else: print '在本宇宙中这是不可能滴!' ``elif`` 就是 else if 的缩写。 python 没有 switch 语句,因为觉得没必要,原因之一是 if elif else 已经足以应付大部分情况。 况且对于很大一部分其他的 switch 应用场景,python 还有更加优雅的方式来处理,请看: :: # 伪码 switch( sys.argv[1] ): case '-e': walk_cd() case '-d': search_cd() ... default: raise CommandException("Unknown Commend: " + sys.argv[1]) # 使用 if 替代 if sys.argv[1]=='-e': walk_cd() elif sys.argv[1]=='-d': search_cd() ... else: raise CommandException("Unknown Command: " + sys.argv[1]) # 更好的做法 commands = { '-e' : walk_cd, '-d' : search_cd, } try: commands[ sys.argv[1] ]() except KeyError: raise CommandException("Unknown Command: " + sys.argv[1]) 还记得上一章 python 数据类型中的习题 1 吗?我们要求读者用 and 和 or 操作符模拟 c 语言的 ? : 三元操作符。 实际上在 python2.5 以前,这确实是一个还算实用的技巧,不过 python2.5 中应广大 python 程序员的强烈呼吁, 终于加入了新的语法,终于可以用更优美的方式表达这种常用分支: TODO: 换成更有实际意义的例子 :: a = b*2 if b else default_value 等价于: :: if b: a = b*2 else: a = default_value 用 and or 技巧也可以写成: :: a = b and b*2 or default_value 显然是第一种写法看起来最顺眼了。  | 
|
| Line 20: | Line 103: | 
| :: for item in some_list: do something with item python 的 for 与 c 的 for 不同,要类比的话,大家可以想象一下某些语言的 foreach 。 python 只支持这一种 for 语句,而没有类似 c 的 for 语句, 因为用这种 for 语句很容易就可以模仿出 c 那种类型的 for 语句 (还记得上一章的习题2吧,对,就是它:range ;-): :: # 伪码,c 类型的 for 语句: for(i=0;i<10;i++): ... # python 等价物: for i in range(10): ... .. topic:: Under the hood :: for item in some_list: do some thing with item 实际上等价于: :: iterator = iter(some_list) try: item = iterator.next() do some thing with item item = iterator.next() do some thing with item ... except StopIteration: pass 也就是说 for in 操作的是任意的迭代器! TODO: 关于迭代器!  | 
.. contents::
:status: 草稿 ;HuangYi; 10%;
===================
Python过程控制
===================
python 向来秉承简洁的设计原则,在语法的设计上体现得尤为明显!
稍有编程经验的朋友对下面这些语法应当不会陌生。
对于许多读者来说,可能只需要注意两点,本章的内容就可以飞快得浏览过去了:
一是 python 以缩进控制作用范围并且缩进都以冒号开头;
二是所有这些过程控制语句都可以跟个 ``else`` 子句!
``if`` 语句后面跟 ``else`` 自不必说,连 ``for`` 、 ``while`` 语句也可以跟 ``else`` 子句! 
TODO: 关于不同语句中的 ``else``
if 分支
=========
::
    
  if a == b:
      print 'a 等于 b'
  else:
      print 'a 不等于 b'
也许你还需要更细致地控制:
::
    
  if a == b:
      print 'a 等于 b'
  elif a < b:
      print 'a 小于 b'
  elif a > b:
      print 'a 大于 b'
  else:
      print '在本宇宙中这是不可能滴!'
``elif`` 就是 else if 的缩写。
python 没有 switch 语句,因为觉得没必要,原因之一是 if elif else 已经足以应付大部分情况。
况且对于很大一部分其他的 switch 应用场景,python 还有更加优雅的方式来处理,请看:
::
  # 伪码
  switch( sys.argv[1] ):
      case '-e':
          walk_cd()
      case '-d':
          search_cd()
      ...
      default:
          raise CommandException("Unknown Commend: " + sys.argv[1])
  # 使用 if 替代
  if sys.argv[1]=='-e':
      walk_cd()
  elif sys.argv[1]=='-d':
      search_cd()
  ...
  else:
      raise CommandException("Unknown Command: " + sys.argv[1])
  # 更好的做法
  commands = {
      '-e'   : walk_cd,
      '-d'    : search_cd,
  }
  try:
      commands[ sys.argv[1] ]()
  except KeyError:
      raise CommandException("Unknown Command: " + sys.argv[1])
还记得上一章 python 数据类型中的习题 1 吗?我们要求读者用 and 和 or 操作符模拟 c 语言的 ? : 三元操作符。
实际上在 python2.5 以前,这确实是一个还算实用的技巧,不过 python2.5 中应广大 python 程序员的强烈呼吁,
终于加入了新的语法,终于可以用更优美的方式表达这种常用分支:
TODO: 换成更有实际意义的例子
::
  
  a = b*2 if b else default_value
等价于:
::
  
  if b:
      a = b*2
  else:
      a = default_value
用 and or 技巧也可以写成:
::
  a = b and b*2 or default_value
显然是第一种写法看起来最顺眼了。
for 循环
=========
::
  for item in some_list:
      do something with item
python 的 for 与 c 的 for 不同,要类比的话,大家可以想象一下某些语言的 foreach 。
python 只支持这一种 for 语句,而没有类似 c 的 for 语句,
因为用这种 for 语句很容易就可以模仿出 c 那种类型的 for 语句
(还记得上一章的习题2吧,对,就是它:range ;-):
::
  
  # 伪码,c 类型的 for 语句:
  for(i=0;i<10;i++):
      ...
  # python 等价物:
  for i in range(10):
      ...
.. topic:: Under the hood
  
  ::
    for item in some_list:
        do some thing with item
  实际上等价于:
  ::
    iterator = iter(some_list)
    try:
        item = iterator.next()
        do some thing with item
        item = iterator.next()
        do some thing with item
        ...
    except StopIteration:
        pass
  
  也就是说 for in 操作的是任意的迭代器!
  TODO: 关于迭代器!
while 循环
============
异常处理
============
小结
==========
练习
===========
.. macro:: [[PageComment2(nosmiley=1, notify=1)]]