您的位置:首页 > 编程语言 > Python开发

python条件及循环语句

2015-05-18 16:34 323 查看
1、条件语句
2、循环语句
3、迭代器
4、列表解析
5、生成器表达式

1、条件语句
最简单的条件语句:
if expression:
expr_true_suite
如上,if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and、or和not连接,expr_true_suite是代码块,expression为true时执行,代码块如果只有一行,上面的整个条件语句便可全部写到一行,但可读性差。
带elif和else的条件语句:
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
elif expressionN:
exprN_true_suite
else:
none_of_the_above_suite
如上,语法同其它语言的条件语句类似,elif和else是可选的。
条件表达式实现三元操作符:
在C/C++中,三元操作符如下(E成立时执行X,否则执行Y)——
E ? X : Y
python模拟的三元操作符——
(E and [X] or [Y])[0]
python三元操作符的实现——
X if E else Y

2、循环语句
while循环:
while expression:
suite_to_repeat
for循环:
for iter_var in iterable:
suite_to_repeat
for循环访问可迭代对象iterable的所有元素,iter_var被设置为可迭代对象的当前元素。for循环可用于序列类型,包括字符串、列表及元组,也可用于迭代器类型,迭代器对象有一个next()方法,调用后返回下一个条目,所有条目迭代完成后,迭代器引发一个StopIteration异常告诉程序循环结束,for语句在内部调用next()并捕获异常。
break、continue、pass:
break语句结束当前循环,跳转到下条语句。continue语句终止当前循环,尝试下一次迭代。pass语句表示不做任何事情。
循环中的else:
在循环中也可以有else,这与C/C++不同,else字句只在循环完成后执行,也就是说break语句会跳过else块。

3、迭代器
迭代器为类序列对象提供了一个类序列的接口,更巧妙的是,还可以迭代不是序列但表现出序列行为的对象,例如字典的key,一个文件的行等等。对一个对象调用iter()就可以得到它的迭代器,一个实现了__iter__()next()方法的类也可以作为迭代器使用。itertools是与迭代器相关的一个模块。

4、列表解析
先来看一下列表解析的语法:
[expr for iter_var in iterable if cond_expr]
这个语句的核心是for循环,它迭代iterable对象的所有条目,前面的expr应用于序列的每个成员,最后的结果是该表达式产生的列表,迭代变量并不需要是表达式的一部分。if语句是可选的,用来捕获满足条件表达式cond_expr的序列成员。
例如,如下计算序列成员的平方的lamda函数表达式——
map[lamda x: x ** 2, range(6)]
可替换为列表解析——
[x ** 2 for x in range(6)]
结果一样是——
[0, 1, 4, 9, 16, 25]

5、生成器表达式
生成器表达式是列表解析的一个扩展。列表解析的一个不足之处就是生成所有的数据,用以创建这个列表,这可能对有大量数据的迭代器有负面效应。而生成器表达式不真正创建数字列表,而是返回一个生成器,这个生成器每次计算出一个条目后,把这个条目yield出来,使用了延时计算,在使用内存上更有效。
生成器表达式语法如下:
(expr for iter_var in iterable if cond_expr)

显式调用next()会返回下一个值,结束时返回StopIteration异常,另外,我们还可以通过send()发送一个值给生成器,调用close()方法终结。
下面是一个例子generator.py
#!/usr/bin/env python

def counter(start_at):
count = start_at
print "count = start_at", count
while True:
val = (yield count)
print "val = (yield count)", val
if val is not None:
count = val
print 'count = val', count
else:
count += 1
print 'count += 1', count

下面是执行结果:
>>> import generator
>>> count = generator.counter(10)
>>> count.next()
count = start_at 10
10
>>> count.next()
val = (yield count) None
count += 1 11
11
>>> count.next()
val = (yield count) None
count += 1 12
12
>>> count.send(100)
val = (yield count) 100
count = val 100
100
>>> count.next()
val = (yield count) None
count += 1 101
101
>>> count.close()
>>> count.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: