一木.溪桥 在Logic Education跟Amy学Python
逻辑教育 :https://logicedu.ke.qq.com
12期:Python基础课
一木.溪桥学Python-11:迭代器、生成器、面象对象class MyClass:、self 参数、 __init__() 方法、__str__() 方法
日期:2021年1月8日
学习目标:
- 迭代器
- 生成器
- 面象对象class MyClass:
- self 参数
- __init__() 方法
- __str__() 方法
学习内容:
迭代器
迭代器介绍
迭代器指的是迭代取值的工具,迭代是指一个重复的过程,每一次重复都是基于上一
次结果而来迭代提供了一种通用的 不依赖索引 的迭代取值方式
可迭代对象
可以用 for 循环遍历的对象都是可迭代对象。
str,list,tuple,dict,set 等都是可迭代对象。
generator (生成器 和 yield 的生成器函数) 也是可迭代对象。
判断是否可迭代
- 是否有内置的__iter__方法
isinstance(obj, Iterable)
-eg.
# 通过isinstance来判断其是否是可迭代的对象
from collections import Iterable # collections是内置的模块
print(isinstance("abc", Iterable)) # True
print(isinstance({1, 2, 3}, Iterable)) # True
print(isinstance(2.15, Iterable)) # False
- 有内置的__iter__()方法的对象,执行迭代器的__iter__()方法得到的依然是迭代器本身
- 有内置的__next__()方法的对象,执行该方法可以不依赖索引取值
- 问题: 可迭代的对象一定是迭代器吗?False
- eg.
# 说明:可迭代的对象不一定是迭代器
# 1.看其是否含有__iter__以及__next__方法
# 2.看其是否属于Iterator
from collections import Iterator
li = [1,2,3,4]
print(isinstance(li, Iterator)) # False
iter()
可以被 next() 函数调用并不断返回下一个值的对象称为迭代器:Iterator。那我们可以通过 iter() 方法将可迭代的对象,转为迭代器。
- eg.
li = [1, 2, 3, 4]
print(type(li)) # <class 'list'>
# lis = li.__iter__()
lis = iter(li) # iter()方法就可以将可迭代的对象转为迭代器
print(type(lis)) # <class 'list_iterator'>
__next__()
-
注意:
迭代器不可以通过下标取值,而是使用 __next__() 或者 next() 。但是只要超出
范围则直接报错 StopIteration 。
next() 只能顺延调用,不能往前。 -
eg.
li = [1, 2, 3, 4]
print(type(li)) # <class 'list'>
# lis = li.__iter__()
lis = iter(li) # iter()方法就可以将可迭代的对象转为迭代器
print(type(lis)) # <class 'list_iterator'>
# 如果是迭代器对象,如何取值。可以通过__next__()或者next()来取值,但是通常使用next()取值。
# 注意:1.超出长度则报错 2.只能顺延调用&#