`
linvar
  • 浏览: 254021 次
  • 性别: Icon_minigender_1
  • 来自: 未定
社区版块
存档分类
最新评论

python2.x学习笔记(9) -- 条件和循环

阅读更多
1. if expression1:
       expr1_true_suite
   elif expression2:
       expr2_true_suite
   elif expressionN:
       exprN_true_suite
   else:
       none_of_the_above_suite

2. 条件表达式(即"三元操作符")
Python 2.5 集成的语法确定为: X if C else Y
>>> smaller = x if x < y else y

3. while expression:
       suite_to_repeat

4. 它提供了 Python 中最强大的循环结构.它可以遍历序列成员, 可以用在 列表解析 和 生成器表达式中, 它会自动地调用迭代器的 next()方法, 捕获 StopIteration 异常并结束循环(所有这一切都是在内部发生的).
for iter_var in iterable:
    suite_to_repeat

5. range() 内建函数
range(start, end, step =1)
xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合, 因为它不会在内存里创建列表的完整拷贝. 它只被用在 for 循环中, 在 for 循环外使用它没有意义。

6. 与序列相关的内建函数
sorted(), reversed(), enumerate(), zip()
其中两个函数( sorted() 和 zip() )返回一个序列(列表),
而另外两个函数(reversed() 和 enumerate() )返回迭代器(类似序列)

7. Python 提供了 pass 语句, 它不做任何事情 - 即 NOP

8. 可以在 while 和 for 循环中使用 else 语句. 它们是怎么工作的呢? 在循环中使用时, else子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.

9. 迭代器和 iter() 函数
迭代器是在版本 2.2 被加入 Python 的, 它为类序列对象提供了一个类序列的接口.
Python 的迭代无缝地支持序列对象, 而且它还允许程序员迭代非序列类型, 包括用户定义的对象. 
迭代器用起来很灵巧, 你可以迭代不是序列但表现出序列行为的对象, 例如字典的 key , 一个文件的行, 等等. 当你使用循环迭代一个对象条目时, 你几乎不可能分辨出它是迭代器还是序列.你不必去关注这些, 因为 Python 让它象一个序列那样操作.

10. 根本上说, 迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next() 方法就可以获得它. 条目全部取出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成.

11. reversed() 内建函数将返回一个反序访问的迭代器. enumerate() 内建函数同样也返回迭代器.另外两个新的内建函数, any() 和 all() , 在 Python 2.5 中新增, 如果迭代器中某个/所有条目的值都为布尔真时,则它们返回值为真.

12. 使用迭代器
>>> myTuple = (123, 'xyz', 45.67)
>>> i = iter(myTuple)
>>> i.next()
字典和文件是另外两个可迭代的 Python 数据类型. 字典的迭代器会遍历它的键(keys).
语句 for eachKey in myDict.keys() 可以缩写为 for eachKey in myDict

13. 另外, Python 还引进了三个新的内建字典方法来定义迭代: myDict.iterkeys() (通过 keys 迭代), myDict.itervalues() (通过 values 迭代), 以及 myDicit.iteritems() (通过 key/value 对来迭代). 注意 , in操作符也可以用于检 查字典的key是否存在,之前的布尔表达式myDict.has_key(anyKey) 可以被简写为 anyKey in myDict .

14. 文件对象生成的迭代器会自动调用 readline() 方法. 这样, 循环就可以访问文本文件的所有行 . 程序员可以使用更简单的for eachLine in myFile 替换 for eachLine in myFile.readlines() :

15. 记住,在迭代可变对象的时候修改它们并不是个好主意.

16. 如何创建迭代器
对一个对象调用 iter() 就可以得到它的迭代器. 它的语法如下:
iter(obj)
iter(func, sentinel )
如果你传递一个参数给 iter() , 它会检查你传递的是不是一个序列, 如果是, 那么很简单:根据索引从 0 一直迭代到序列结束. 另一个创建迭代器的方法是使用类, 一个实现了 __iter__() 和 next() 方法的类可以作为迭代器使用.
    如果是传递两个参数给iter() ,它会重复地调用func ,直到迭代器的下个值等于sentinel.

17. 列表解析( List comprehensions, 或缩略为 list comps ) 来自函数式编程语言 Haskell . 它是一个非常有用, 简单, 而且灵活的工具, 可以用来动态地创建列表.
[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]
这个语句的核心是 for 循环, 它迭代 iterable 对象的所有条目. 前边的 expr 应用于序列的每个成员, 最后的结果值是该表达式产生的列表. 迭代变量并不需要是表达式的一部分.
>>> [(x+1,y+1) for x in range(3) for y in range(5)]
>>> [x for x in seq if x % 2]
#计算单词个数:
>>> f = open('hhga.txt', 'r')
>>> len([word for line in f for word in line.split()])
91

18. 生成器表达式是列表解析的一个扩展.                            
生成器是特定的函数, 允许你返回一个值, 然后"暂停"代码的执行, 稍后恢复.

19. 生成器表达式在 Python 2.4 被引入, 它与列表解析非常相似,而且它们的基本语法基本相同;不过它并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来. 生成器表达式使用了"延迟计算"(lazy evaluation), 所以它在使用内存上更有效. 我们来看看它和列表解析到底有多相似:
列表解析:
[expr for iter_var in iterable if cond_expr]
生成器表达式:
(expr for iter_var in iterable if cond_expr)
分享到:
评论

相关推荐

    (完整版)Python基础学习笔记.docx

    (完整版)Python基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。(完整版)Python基础学习笔记全文共69页,当前为第1页。Python 基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。...

    python学习笔记精品.doc

    有如下python程序段: a=[4,5,3,6,7,8,2,9,1] m ,c=1, 1 for i in range(1, len(a)): if a[i]&gt;=a[i-1]: c+=1 m=max(m, c) else: c=1 print (c, m) 则程序执行后,c和m的值分别是( ) A.1和1 B.1和4 C.2和4 D.3...

    Python3.4学习笔记之常用操作符,条件分支和循环用法示例

    本文实例讲述了Python3.4常用操作符,条件分支和循环用法。分享给大家供大家参考,具体如下: #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个斜杠实现2.x默认的地板除法(整数...

    一文总结学习Python的14张思维导图

    本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章)。 首先,按顺序依次展示了以下内容的一...本篇笔记原先基于 Python 2.x,经历多次改版,目前最新版本基于 Python 3.x

    python学习笔记之列表生成式

    列表生成式 列表生成式是python内置的非常简单且强大的...如果是常规的循环和条件,就是 for x in range(1,11): if x%2==0: print x else: print -x 但如果是列表生成式,我们可以写成 x if x%2==0 else -x for x

    python学习笔记–4,控制流程+函数

    条件结构 if 判断语句1: 执行体1 elif 判断语句2: 执行体2 else:执行体3 eg:// a=0 if a1: print(4) elif a&gt;=1: print(44) else:print(444) // 结果:444 #三目运算:True if a5 else False 结果:Flase 循环结构 ...

    python基础学习day06.txt

    用break 结束循环时,else子句不会被执行 range函数 range(stop) range(start, stop[, step]) continue 语句 while语句 while 真值表达式: ..... for语句 for x in 可迭代对象: ... 列表: [] [1,2,3] ...

    python学习笔记——集合与字典

    python学习笔记——集合与字典1. 集合的基本概念1.1 set(x)函数1.2 集合类型的10个操作函数2. 字典的基本概念2.1 字典的索引2.2 字典的操作2.3 字典小结 1. 集合的基本概念 集合类型和数学集合中的概念一致,即包含0...

    Python学习笔记之迭代器和生成器用法实例详解

    本文实例讲述了Python学习笔记之迭代器和生成器用法。分享给大家供大家参考,具体如下: 迭代器和生成器 迭代器 每次可以返回一个对象元素的对象,例如返回一个列表。我们到目前为止使用的很多内置函数(例如 ...

    Python学习笔记基本数据结构之序列类型list tuple range用法分析

    本文实例讲述了Python学习笔记基本数据结构之序列类型list tuple range用法。分享给大家供大家参考,具体如下: list 和 tuple list:列表,由 [] 标识; 有序;可改变列表元素 tuple:元组,由 () 标识; 有序;...

    用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员...吴恩达deepLearning.ai循环神经网络RNN学习笔记(理论篇) 我们将实现以下结构的RNN,在这个例子中 Tx = Ty。 向量表示以及它的维度 Input with nx number of units 对单个输入样本,x(i) 

    Python—-迭代器与生成器

    Python学习之路,点击有全套Python笔记 迭代器是Python最强大的功能之一,是访问集合元素的一种方法。 迭代器可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器...

Global site tag (gtag.js) - Google Analytics