这堂课主要是对各种概念的辨析而且花了很长时间复习上节课内容
*这节课课件上的很多尝试自己构造iterator和iterable例子都涉及了类class的知识,
因为这部分没学所以就不分析了,自己看课件等到时候学完了再回来看
十,可迭代对象 vs. 迭代器 vs.生成器(iterable vs. iterator vs. generator)
• a container 容器
• an iterable 可迭代对象
• an iterator 迭代器
• a generator 生成器
• a generator expression 生成器表达式
• a {list, set, dict} comprehension 列表,集合,列表推导式
这几个概念的辨析要仔细看他上课讲的PPT上的关系图, a generator expression和a generator function虽然语法形式不同,但是它们被调用都会产生generator。generator是特殊的iterator。iterator内部需要实现. _ next _ ()方法。iterable内部必定要有. _ iter() _ 方法返回iterator,右边 {list,set,dict} comprehension总会返回相应的container,container一般都是iterable
1.container
容器是容纳元素的数据结构,并且支持in成员测试。可以询问一个对象是否包含某个元素时,它就是一个容器
例子:
>>>1 in [1,2,3]
True
>>>1 in (1,2,3)
True
>>>1 in {1,2,3}
True
>>>'spam' in {1:'spam',2:'ham',3:'eggs'}
False
>>>1 in {1:'spam',2:'ham',3:'eggs'}
True
*字典只能判断键,不能判断值
>>>'foo' in 'foobar'
True
>>>'f' in 'foobar'
True
*甚至可以判断字符串的子串
2.iterable
大多数容器也是可迭代的。但是还有更多的东西是可迭代的。例如打开的文件等。iterable可以通过iter()返回iterator
*把列表放在for循环里遍历的本质
x=[1,2,3]
for element in x:
…
先把这个列表(the iterable)交给iter()返回列表对应的iterator,for循环帮你调用next()函数(本质上是调用. _ next _ ()方法)
3.iterator
iterator对象在迭代期间生成iterable的值。调用next()或 _ next _ ()于iterator以产生下一个值。迭代结束时抛出StopIteration异常,如果对iterator对象再用iter()函数将返回它自身
4.generator与generator expression,generator function
这节课接下来的内容花了十分钟讲的很水,自己看PPT吧
十一,两个模块(itertools functools)
(只讲了三四分钟,主要还是自己看。不太用得到,只要知道有这东西就行)
番外:
functional Programming(函数式编程,函数型程序设计)
Procedural() vs. Object-Oriented
Procedural Program Design
Object-Oriented Program Design
编辑于2020-4-28 18:03