原作者:xina
程式流程、函数与模组
fllow control
1 if a <= b:
2 if c == d:
3 foo()
4 aoo()
5 else:
6 boo()
上面一个 if 的使用范例,在行 1,如果 a 小於等於 b 行 2~4 会被执行,否则行 6 会被执行。 python 并没有像 pascal 使用 begin ... end 定义 block,也没有像 c 使用 { ... } 定义 block, python 直接使用缩排决定statement 是否属於同一个 block。如 行1-4 因为缩排而成为一个 block, 而行 2-3 也因为缩排而成为一个 block,每一个 block 则成为一个 compound statement。if statement 的语法规式为 :
if : .....
elif : ......
elif : ....
else: .......
如其它语言,elif 和 else 为选择性功能,elif => else if
1 while a >= b:
2 foo()
3 boo()
4 if c != d: break
5 if c >= d: continue
6 coo()
7 else:
8 doo()
9 eoo()
上面是 while loop 的使用范例,当 a >= b 时,行 2-6会不断的一再执行,直到 a >= b 不成立时(false), 则执行行 8,然後继续往下执行 eoo()。但,如果执行行 4 的 break,则会无条件直接跳离 while loop, 不再执行 while loop 的任何内容(包含 else 的部分),直接执行行 9。若 while loop 中,continue 被执行, 则程式会直接跳过後面的指令回到行 1,进行条件判断。
1 for i in 1, 7, 3, 9:
2 print i,
结果显示 : 1 7 3 9
上面为 for loop 的使用法,for in : ....in 後面可为任何 sequence type object。
1 for i in range(3):
2 print i,
3 print range(3)
结果显示 : 0 1 2 [0, 1, 2]
range(x) 会产生一个包含 0 ~ x-1 的 list。
function
1 def foo(a, b):
2 return a+b
3 print foo(3, 4)
结果显示 : 7
上面为 function 的定义方式,def (, ....): ....return 可回传 function 的执行结果。 当行 3 执行 foo(3, 4),function foo 会被执行,然後传回 3+4 (a+b) 的结果。
1 def foo(a, b=2):
2 return a+b
3 print foo(3), foo(3,4)
结果显示 : 5 7
function 的参数可以定义预设值,设立预设值的参数如果呼叫时不给予,那麽会使用预设值。
1 def foo(a = []):
2 a.append(7)
3 return a
4 print foo(),
5 print foo()
结果显示 : [7] [7, 7]
预设值只会在 function 定义指令第一次被执行时进行计算,因此上例的 a 参数在第一次执行定义指令时, 就将预设值 bind 到一个 list object,之後使用预设值时就会 bind 到同一个 object,因而产生记忆的现象, 使第二次执行 foo() 所得到的结果受第一次执行的影向。
module
python 的 source file 为 *.py 这样的形式,如: foo.py boo.py。python 定义每一个 source file 为一个 module。
下面两个 module :
--- a.py ----
def foo():
return action+1
action = 9
--- a.py end ---
--- b.py ---
import a
print a.foo(), a.action
--- b.py ---
执行 'python b.py',结果显示 :
10 9
当需要使用到其它 module 时,可以使用 import 指今,将该 module import 到你的 name space 里。 上例 b modlue 就 import a 这个 modlue,当 b 执行 import 指令时,在 b 的 name space 里, a 这个 name 就会 bind 到一个 module object。module 一但 load 进 memory 时, 就以 module object 代表,以供进一部的使用。所有 module 里定义的 name(function,object 或後面会介绍的 class)都会成为 module object 的 attribute。透过使用 module object attribute, 我们可以 access module 内所定义之 name。module attribute 的使用方式如上例, module 的 name 接着 '.' 接着 attribute 的 name。每个 module 都有自己的 name space, 透过 module attribute,我们可以 access 到其它 module 的 name space。
当 module 头一次被 load 进 memory 时,module 会被从头到尾执行一次。 其执行的结果则定义了 module 的 name space,使 name 和 object bind 在一起。 如上例执行 a.py 中的 def foo(): .... 这个指令时,定义一个 function object, 并使之和 foo 这个 name 进行 binding。
--- a.py ----
def foo():
return action+1
action = 9
--- a.py end ---
--- b.py ---
from a import *
print foo(), action
--- b.py ---
上例和前一个例子是相同的,但使用 from import *,这个指令的作用是, 把 module name space 里所有的 name,import 到目前的 name space 里。'*' 是指所有的 name, 如果只是要 import 特定的 name,那麽你可以指定 name 替代 '*',如 from a import foo。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器