📄 00000003.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: yyh (一笑了之), 信区: Linux <BR>标 题: 第四章 流程控制 <BR>发信站: BBS 水木清华站 (Tue Jun 20 17:04:29 2000) <BR> <BR>第四章 流程控制 <BR>前面我们已经见到了如何由用while结构控制流程运行。这一章我们介绍更多的控制结构 <BR>。Python具有和其它语言类似的控制结构但略有差别。 <BR>4.1 If 语句 <BR>If 语句可能是最基本的程序分支语句了。例如: <BR>><I>>> if x < 0: </I><BR>... x = 0 <BR>... print 'Negative changed to zero' <BR>... elif x == 0: <BR>... print 'Zero' <BR>... elif x == 1: <BR>... print 'Single' <BR>... else: <BR>... print 'More' <BR>... <BR>可以有零到多个elif部分,else部分可选。关键字elif是else if的缩写,这样可以缩短 <BR>语句行长度。其它语言中switch 或 case 语句可以用if...elif...elif...语句组来实 <BR>现。 <BR>4.2 for 语句 <BR>Python中的for语句与你可能熟悉的C或者Pascal中的相应语句略有不同。不象Pascal 那 <BR>样总是对数字序列进行循环,也不是象C中那样完全由程序员自由地控制循环条件和循环 <BR>体,Python的for循环是对任意种类的序列(如列表或字符串)按出现次序遍历每一项。 <BR>例如: <BR>><I>>> # 计算字符串长: </I><BR>... a = ['cat', 'window', 'defenestrate'] <BR>><I>>> for x in a: </I><BR>... print x, len(x) <BR>... <BR>cat 3 <BR>window 6 <BR>defenestrate 12 <BR>><I>>> </I><BR>尽量不要在循环体内修改用来控制循环的序列(当然,只有可变的序列类型如列表才有 <BR>可能被修改),这样程序可能会出问题。如果需要这样,比如说要复制某些项,可以用 <BR>序列的副本来控制循环。片段记号让你很容易生成副本: <BR>><I>>> for x in a[:]: # 生成整个列表的片段副本 </I><BR>... if len(x) > 6: a.insert(0, x) <BR>... <BR>><I>>> a </I><BR>['defenestrate', 'cat', 'window', 'defenestrate'] <BR>><I>>> </I><BR>结果是把列表中长度超过6个字符的字符串插入到列表开头。 <BR>4.3 range() 函数 <BR>如果确实需要对一列数字进行循环的话,可以使用内置函数range()。它生成包含数字序 <BR>列的列表,如: <BR>><I>>> range(10) </I><BR>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <BR>><I>>> </I><BR>注意给出的终点永远不出现在生成的列表中,range(10)生成一个十个数的列表,恰好是 <BR>长度为10的序列的合法下标的各个值。也可以指定不同的起始点,或者指定不同的间隔 <BR>(甚至负数): <BR>><I>>> range(5, 10) </I><BR>[5, 6, 7, 8, 9] <BR>><I>>> range(0, 10, 3) </I><BR>[0, 3, 6, 9] <BR>><I>>> range(-10, -100, -30) </I><BR>[-10, -40, -70] <BR>><I>>> </I><BR>为了对序列的下标进行循环,如下联合使用range() 和 len(): <BR>><I>>> a = ['Mary', 'had', 'a', 'little', 'lamb'] </I><BR>><I>>> for i in range(len(a)): </I><BR>... print i, a[i] <BR>... <BR>0 Mary <BR>1 had <BR>2 a <BR>3 little <BR>4 lamb <BR>><I>>> </I><BR> <BR>4.4 break语句,continue语句和循环中的else子句 <BR>如同C语言一样,break语句跳出其所处的最内层的for 或 while循环,continue语句继 <BR>续下一循环步。 <BR>循环语句还可以带一个 else 子句,当循环正常结束时执行其内容,但如果循环是用br <BR>eak 语句跳出的则不执行其内容。下例说明了这种用法,此例求素数: <BR>><I>>> for n in range(2, 10): </I><BR>... for x in range(2, n): <BR>... if n % x == 0: <BR>... print n, 'equals', x, '*', n/x <BR>... break <BR>... else: <BR>... print n, 'is a prime number' <BR>... <BR>2 is a prime number <BR>3 is a prime number <BR>4 equals 2 * 2 <BR>5 is a prime number <BR>6 equals 2 * 3 <BR>7 is a prime number <BR>8 equals 2 * 4 <BR>9 equals 3 * 3 <BR>><I>>> </I><BR> <BR>4.5 pass 语句 <BR>pass语句不执行任何操作,当语法要求一个语句而程序不需要执行操作时就用此语句。 <BR>例如: <BR>><I>>> while 1: </I><BR>... pass # 等待键盘中断 <BR>... <BR> <BR>4.6 函数定义 <BR>我们可以定义一个函数用来计算某一界限以下的所有Fibonacci序列值: <BR>><I>>> def fib(n): # 写出 n 以下的所有Fibonacci序列值 </I><BR>... a, b = 0, 1 <BR>... while b < n: <BR>... print b, <BR>... a, b = b, a+b <BR>... <BR>><I>>> # 调用刚刚定义的函数: </I><BR>... fib(2000) <BR> <BR>1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 <BR>><I>>> </I><BR>其中关键字 def 开始一个函数定义,其后应该是函数名,括号内的形参表,以冒号结束 <BR>。构成函数体的各语句从下一行开始,用一个制表符缩进。函数的第一个语句可以是一 <BR>个字符串,如果是的话,这个字符串就是函数的文档字符串,简称为docstring。有一些 <BR>工具可以利用文档字符串自动生成可打印的文档,或者让用户交互地浏览代码,所以在 <BR>自己编程时加入文档字符串是一个好习惯,应该养成这样的习惯。 <BR>函数在执行时对局部变量引入一个新的符号表。函数中的变量赋值都存入局部符号表; <BR>引用变量时变量名先从局部符号表中查找,然后在全局符号表中查找,最后从内置的名 <BR>字中查找。因此,在函数中不能直接对全局变量赋值(除非用了global语句来说明), <BR>但可以引用全局变量的值。 <BR>函数调用的实参被引入函数的局部符号表,即函数的参数是按值调用的。函数再调用其 <BR>它函数时为该函数生成一个新的符号表。但是严格地说,函数的调用是按引用调用的, <BR>因为如果参数是一个可变类型如列表的话在函数中改变形参的内容将导致实参的内容被 <BR>改变(不改变的是实参名字的绑定关系)。 <BR>函数定义把函数名放入当前符号表。函数名的值类型为用户自定义函数,这个值可以赋 <BR>给另一个名字,从而这个名字也代表相同的函数。这可以作为一般的改名方法: <BR> <BR>><I>>> fib </I><BR><function object at 10042ed0> <BR>><I>>> f = fib </I><BR>><I>>> f(100) </I><BR>1 1 2 3 5 8 13 21 34 55 89 <BR>><I>>> </I><BR> <BR>你可能会说 fib 不是函数而是过程。Python和C一样,过程只是不返回值的函数。实际 <BR>上,严格地说,过程也返回一个值,只不过是一个很没意思的值。这个值叫做 None(这 <BR>是一个内置的名字)。解释程序交互运行时如果只需要显示这个值的话就会忽略不显示 <BR>。如果希望显示的话可以用 print 语句: <BR> <BR>><I>>> print fib(0) </I><BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -