这章是有关程序结构的,主要是if,else,while,for等语句。还讲述了迭代器,列表解析和生成器表达式。
1:if,else,elif
- if expression:
-
expr_true_suite
-
-
if expression: expr_true_suite
-
-
if expression:
-
expr_true_suite
-
else:
-
expr_false_suite
-
-
if expression1:
-
expr2_true_suite
-
elif expression2:
-
expr2_true_suite
-
.
-
.
-
elif expressionN:
-
exprN_true_suite
-
else:
-
none_of_the_above_suite
一个if语句可以有多个elif语句,但只能有一个else语句。
expression中可以包含not,or,and操作符。
python中暂时没有switch语句,因此要用switch的时候,可以考虑if。
2:条件表达式
条件表达式的语法在python2.5后才确定为:x if c else y,其意义为:若c为True,则计算x并返回x的值,否则计算y并返回y的值。
在此之前人们使用的方法为:(c and [x] or [y])[0]。
3:while语句
循环语句,一直循环直到条件为假
- while expression:
-
suite_to_repeat
小心无限循环,即使是需要无限循环的时候。
4:for语句
python中最强大的循环结构
可以遍历迭代对象,可以用在列表解析和生成器表达式。它会自动的调用迭代器的next()方法,自动捕获StopIteration异常并终止循环。
- for iter_var in iterable:
-
suite_to_repeat
对于序列对象,可以直接迭代,也可以利用索引迭代,也可以两者结合,如下例
- >>> a = ['The', 'Answer', 'is', '42!']
-
>>> for i in a: # 直接迭代
-
... print i,
-
...
-
The Answer is 42!
-
>>> for idx in range(len(a)): # 利用索引迭代
-
... print a[idx],
-
...
-
The Answer is 42!
-
>>> for idx, key in enumerate(a): # 利用enumerate函数
-
... print idx, key
-
...
-
0 The
-
1 Answer
-
2 is
-
3 42!
-
>>>
将for用于迭代器类型的时候,会不同的调用迭代器的next()方法,直到捕获StopIteration异常。这些都是在内部自动完成的,所以在for的时候,我们并不知道遍历的是序列还是迭代器或只是个可迭代对象。
在传统的c语言里,我们经常使用for(i=0; i < N; i+=k)的方式来迭代,在python里面与这对应的是使用一个range函数。
range函数的语法:
range(start, end, step=1),返回一个列表,列表中的数从start开始,按step递增,列表中的数都小于end。
range(end),这时默认的start为0,step为1
range(start, end),默认的step为1
如果返回的列表特别大,则会特别占用内存,这时可以使用xrange()函数。该函数与range的功能一样,只不过该函数并不一次性的返回所有的结果,xrange()返回的是一个可迭代对象。如type(xrange(0,3))返回的是
5:break语句
break语句用在while和for循环中,用于跳出循环
6:continue语句
continue语句会终止当前循环,忽略剩余语句,然后回到循环顶端,去开始下一次循环。
7:pass语句
pass语句表示不做任何事。
8:else语句
除了在if中使用else外,python里还可以在while和for后使用else语句,当循环完成后会执行else语句。这样break语句会跳过else语句。
我想这里的else语句的作用就在于,只有当while正常完成的时候才会执行else,如果在while中执行了break,return或产生了异常,这时else语句就不会执行了。
9:迭代器
迭代器是一个有next()方法的对象。当循环时会用next()方法来获得下一个项,当全部项都用完后会抛出StopIteration异常。
- # 创建迭代器
- iter(obj)
- iter(func, sentinel)
10:列表解析
语法: [expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]
11:生成器表达式
语法:(expr for iter_var in iterable if cond_expr)
生成器表达式返回一个生成器,其语法类似于列表解析。但生成器表达式是内存友好的。
阅读(2827) | 评论(0) | 转发(0) |