<p>今天终于有时间继续推进Python Tutorial的进程了。</p> <p>本文主要是对官方Python Tutorial的第4节内容进行的分析。第4节主要是对Python中的一些控流程制语句进行了基本的介绍。</p> <p>Python的if语句和其它语言的意义类似,需要主要的是其采用elif来替代诸如C语言中的else if,这样设计的意图是啥?答案是为了避免过多的缩进,别忘了,Python是靠缩进来划分语句块的。</p> <p>之后是for语句。Python的for语句可能与一般的高级语言for语句有所不同,其形式为for <em>var </em> in <em>object</em> :  。每一次循环就是遍历object中的一项。如果你有过一些脚本语言编程的经验,对此应该并不陌生。</p> <p>对于数字的迭代,Python中的range()函数就会起到很大的功效。range()函数可接受1、2或3个参数。如果是一个参数则表示从0至该参数(不包括该参数)的所有数字;若是两个参数则表示这两个参数的数值之间(不包括第二个参数)的所有数字;若是三个参数,则表示从第一个参数的值开始至第二个参数,每相差第三个参数值的所有数字,其中第三个参数可以为负数,这时也就需要第一个参数比第二个参数大。任何不符合以上逻辑的都返回的是空。</p> <p>接下来大家一起看一段代码:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:d1845ae2-28a3-446a-abad-83a73c91c37b" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: python; gutter: true; first-line: 1; tab-size: 4; toolbar: false; width: 475px; height: 323px;" style=" width: 475px; height: 323px;overflow: auto;">>>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print n, 'equals', x, '*', n/x ... break ... else: ... # loop fell through without finding a factor ... print n, 'is a prime number' ... 2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3 </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>这是一个查找2-10之前的素数的程序。这里的else字句属于谁呢?根据对齐情况,你就可以看出来,这里的else属于第一个for语句。也就是当内层循环从2至n-1走了完整一遍后,会执行else子句的内容,而如果if条件成立,则会执行break,从而跳出本次循环,也就不执行else子句。对于这点,你可以试着将else去掉,将最后一条print语句与第二个for对齐。这时你会发现,此时会在原有输出不是素数的语句后面,又多了一句 <em>x </em>is a prime number,这就是由于break跳出的是内层循环,所以显然其还会执行外层循环的其它语句,而如果加上else,则else是与内层的for绑定在一起的,相当于出现一个for else语句,所以当break跳出时,显然也就跳出了内层循环的全部,不会执行else语句。(关于以上的解释,如果大家认为不妥,或者有更好地理解方式,欢迎讨论)</p>
<p>当然continue就是结束当前这一次迭代,直接进行下一次迭代,并不是直接跳出本层。</p>
<p>Python中还有空语句pass。该语句不做任何事情,其可以在您还没想好做些什么时用来占位使用,以使你的程序在语法上符合规则。</p>
<p>接下来是有关函数定义的内容。def关键字用来定义函数,基本的介绍在本文中就不多说了,这里想说明一下几点:每当一个函数被调用时,其都会建立一个本地符号表,所有对变量的赋值都会存储在本地符号表中,Python中还有全局的符号表。当某个变量被引用后,其会首先查找本地符号表,之后是全局符号表,再之后是系统内建的名字。在一个函数内,虽然可以对全局变量进行引用,但是不能对一个全局变量直接赋值(除非是对在global语句中定义的变量进行赋值)。</p>
<p>Python中可以对函数名进行重命名,比如有一个函数名叫fib,若执行f = fib,则f也是一个函数,其意义和fib相同。</p>
<p>这里提一下函数和过程的区别。一般来说有返回值的我们认为是函数,否则是一个过程。那么如果我们在Python中定义了一个“没有”返回值的function,我们为什么还叫其函数呢?其实它并不是没有返回值,如果用户没有显式的定义返回值,Python会自动返回None。</p>
<p>关于函数的参数,Python中可以在函数定义时为参数指定默认值,这里也请大家注意一下几点:有默认值的参数只能出现在最后,即有默认值的参数前必须都是没有默认值的,不能两种形式混合在一起;指定的默认值只在定义函数的时候被计算一次,假如为函数指定的默认值是一个变量,那么如果这个变量在函数定义后被修改,也不影响在定义时指定的默认值。需要注意的是,第二点在默认值为一些经常改变的对象是不一样的,也就是对于诸如列表、字典等这样的对象,举个例子:</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:ac7a2514-fd3c-40ac-9eb6-bcd1603404ff" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: python; gutter: true; first-line: 1; tab-size: 4; toolbar: false; width: 400px; height: 141px;" style=" width: 400px; height: 141px;overflow: auto;">def f(a, L=[]): L.append(a) return L
print f(1) print f(2) print f(3) </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>其输出的结果为:</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c98d80cb-7dbe-4f46-bde1-1eae964e985b" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: python; gutter: true; first-line: 1; tab-size: 4; toolbar: false; width: 400px; height: 52px;" style=" width: 400px; height: 52px;overflow: auto;">[1] [1, 2] [1, 2, 3] </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>还有关于参数的很多调用方式:用*操作符可以解包List型变量作为参数;用**操作符可以解包子典型变量作为参数。另外还有Lambda形式的。这里不具体说明了,有兴趣的可以查看相关资料,都比较好理解。</p>
<p>第4节最后介绍了有关文档字符串的内容。在定义一个函数时,我们可以在def语句的下方,在成对的”””内写一些话,来作为对这个函数的一些说明,当我们想查看某个函数的这个说明时,只需执行以下语句:print my_function.__doc__。注意:doc左右是各有两个下划线字符。</p>
<p>OK,以上就是Python Tutorial中第4节的主要内容,欢迎大家积极批评指正!</p>
来源:oschina
链接:https://my.oschina.net/u/217269/blog/126757