Differences between revisions 4 and 6 (spanning 2 versions)
Revision 4 as of 2007-04-12 17:11:41
Size: 257
Editor: ZoomQuiet
Comment:
Revision 6 as of 2007-05-09 05:44:35
Size: 3839
Editor: HuangYi
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
||'''status'''|| 草稿 || HuangYi || 10%;提纲完|| ##language:zh
#format rst
Line 3: Line 4:
[[TableOfContents]] .. contents::
Line 5: Line 6:
= 过程控制 = :status: 草稿 ;HuangYi; 10%;
Line 7: Line 8:
== if 分支 ==
=== 布尔操作 ===
===================
Python过程控制
===================
Line 10: Line 12:
== for 循环 == python 向来秉承简洁的设计原则,在语法的设计上体现得尤为明显!
稍有编程经验的朋友对下面这些语法应当不会陌生。
Line 12: Line 15:
== while 循环 == 对于许多读者来说,可能只需要注意两点,本章的内容就可以飞快得浏览过去了:
一是 python 以缩进控制作用范围并且缩进都以冒号开头;
二是所有这些过程控制语句都可以跟个 ``else`` 子句!
``if`` 语句后面跟 ``else`` 自不必说,连 ``for`` 、 ``while`` 语句也可以跟 ``else`` 子句!
TODO: 关于不同语句中的 ``else``
Line 14: Line 21:
== 异常处理 == if 分支
=========
Line 16: Line 24:
= 小结 = ::
    
  if a == b:
      print 'a 等于 b'
  else:
      print 'a 不等于 b'
Line 18: Line 31:
= 练习 = 也许你还需要更细致地控制:
::
    
  if a == b:
      print 'a 等于 b'
  elif a < b:
      print 'a 小于 b'
  elif a > b:
      print 'a 大于 b'
  else:
      print '在本宇宙中这是不可能滴!'
Line 20: Line 43:
----
[[PageComment2]]
``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)]]
Rendering of reStructured text is not possible, please install Docutils.

.. 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)]]

ObpLovelyPython/LpyQLearn-3-process (last edited 2009-12-25 07:13:47 by localhost)