一木.溪桥学Python-11:迭代器、生成器、面象对象class MyClass:、self 参数、 __init__() 方法、__str__() 方法

本文是一木.溪桥在Logic Education跟Amy学习Python的笔记,涵盖了迭代器、生成器和面向对象的基础知识。迭代器介绍了可迭代对象、迭代器的区别及其使用;生成器讨论了为何需要生成器、如何创建生成器,包括生成器表达式和生成器函数;面向对象部分涉及类、对象、self参数、__init__()和__str__()方法。
摘要由CSDN通过智能技术生成

一木.溪桥 在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.只能顺延调用&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值