python学习06-条件和循环

来源:互联网 发布:sql 求平均值 编辑:程序博客网 时间:2024/05/01 17:47

条件和循环
多重条件表达式
单个 if 语句可以通过使用布尔操作符 and , or 和 not实现多重判断条件或是否定判断条件.
条件表达式(即”三元操作符”)
/// smaller = x if x < y else y
/// smaller
3
for 语句
Python 提供给我们的另一个循环机制就是 for 语句. 它提供了 Python 中最强大的循环结构.它可以遍历序列成员, 可以用在 列表解析 和 生成器表达式中, 它会自动地调用迭代器的 next()方法, 捕获 StopIteration 异常并结束循环(所有这一切都是在内部发生的).
range() 内建函数
Python 提供了两种不同的方法来调用 range() . 完整语法要求提供两个或三个整数参数,range(2, 19, 3),range(3, 7)。
range() 还有两种简略的语法格式:range(end),range(start, end)
xrange() 内建函数
xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合, 因为它不会在内存里创建列表的完整拷贝. 它只被用在 for 循环中, 在 for 循环外使用它没有意义。
与序列相关的内建函数
sorted(), reversed(), enumerate(), zip() 为什么它们叫”序列相关”呢? 是因为其中两个函数( sorted() 和 zip() )返回一个序列(列表), 而另外两个函数( reversed() 和 enumerate() )返回迭代器(类似序列)。
pass 语句
如果你在需要子语句块的地方不写任何语句, 解释器会提示你语法错误. 因此, Python 提供了 pass 语句, 它不做任何事情 - 即 NOP , ( No OPeration , 无操作)
但 Python 不同,你可以在 while 和 for 循环中使用 else 语句. 它们是怎么工作的呢? 在循环中使用时, else子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.
对迭代器的定义:
提供了可扩展的迭代器接口.
对列表迭代带来了性能上的增强.
在字典迭代中性能提升.
创建真正的迭代接口, 而不是原来的随机对象访问.
与所有已经存在的用户定义的类以及扩展的模拟序列和映射的对象向后兼容
迭代非序列集合(例如映射和文件)时, 可以创建更简洁可读的代码.
根本上说, 迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循
环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next() 方法就可以获得它. 条目全部取
出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成.

文件对象生成的迭代器会自动调用 readline() 方法. 这样, 循环就可以访问文本文件的所有行 .
可变对象和迭代器
记住,在迭代可变对象的时候修改它们并不是个好主意.在迭代字典的 key 时, 你绝对不能改变这个字典. 使用字典的 keys() 方法是可以的, 因为keys() 返回一个独立于字典的列表. 而迭代器是与实际对象绑定在一起的, 它将不会继续执行下去.
如何创建迭代器
对一个对象调用 iter() 就可以得到它的迭代器.
列表解析( List comprehensions, 或缩略为 list comps )它是一个非常有用, 简单, 而且灵活的工具, 可以用来动态地创建列表.
map() 对所有的列表成员应用一个操作, filter() 基于一个条件表达式过滤列表成员. 最后, lambda 允许你快速地创建只有一行的函数对象.
列表解析的语法: [expr for iter_var in iterable]
这个语句的核心是 for 循环, 它迭代 iterable 对象的所有条目. 前边的 expr 应用于序列的每个成员, 最后的结果值是该表达式产生的列表. 迭代变量并不需要是表达式的一部分.
生成器
列表解析的一个不足就是必要生成所有的数据, 用以创建整个列表. 这可能对有大量数据的迭代器有负面效应. 生成器表达式通过结合列表解析和生成器解决了这个问题.
生成器表达式在 Python 2.4 被引入, 它与列表解析非常相似,而且它们的基本语法基本相同;不过它并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来. 生成器表达式使用了”延迟计算”(lazy evaluation), 所以它在使用内存上更有效.
列表解析:
[expr for iter_var in iterable if cond_expr]
生成器表达式:
(expr for iter_var in iterable if cond_expr)

0 0
原创粉丝点击