鱼C论坛

 找回密码
 立即注册
查看: 4249|回复: 10

[技术交流] 《零基础入门学习Python》48讲内容归纳

[复制链接]
发表于 2016-3-16 19:12:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小牛有话说:
        各位鱼油,大家好。我是小牛,时光荏苒,岁月如梭,一晃半年过去了,小牛希望能在新的一年里把前面挖的坑给填起来,也衷心地希望各位鱼油能在阅读帖子过程中有所收获。。。。。。

本期主要内容导读:
        这一期我们归纳一下鱼神第四十八讲“魔法方法:迭代器”。这一期里面鱼神首先讲解了迭代的概念,并介绍了迭代相关的魔法方法__iter__(self),__next__(self),并讲解了使用迭代的魔法方法实现斐波那契数列的方法。下面,我们将对上述内容进行详细展开

1. 相关知识点复习
        try 需检测代码段 except EXCEPTION [as reason] 相应语句语句的用法,详见第33讲:异常处理,你不可能总是对的2. 当检测到程序异常时,将异常结果与给出的EXCEPTION比较。


2. 迭代器相关概念
        迭代类似循环,每次的循环称为一次迭代,且本次迭代的结果将作为下次迭代的初始值。提供迭代操作的容器称为迭代器,我们所熟知的序列类型和字典类型均属于迭代器。关于迭代的内置函数有两个:iter()和next(),前者需要一个迭代器类型的参数,后者将迭代对象的参数输入出来,一直到完会出现Stop Iteration异常而终结,两者使用方法如下:

>>> string1 = "小甲鱼"
>>> iter1 = iter(string1)
>>> next(iter1)
'小'
>>> next(iter1)
'甲'
>>> next(iter1)
'鱼'
>>> next(iter1)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    next(iter1)
StopIteration
        for循环语句能够自动提取可迭代对象的每一个元素,这里面我们可以使用迭代内置函数和while循环语句实现for循环过程。
  1. string1 = "小甲鱼"
  2. iter1 = iter(string1)
  3. while True:
  4.     try:
  5.         print(next(iter1))
  6.     except StopIteration as reason:
  7.         break
复制代码

3. 迭代器相关魔法方法
        这里面和内置方法对应,为__iter__(self)和__next__(self)。前者被触发返回迭代器对象,后者将初始值和后续值进行操作。for循环语句能够触发迭代器魔法方法,这里面举一个斐波那契数列实现的程序来说明迭代器类型的魔法方法如何使用。

  1. class Fabri:
  2.     def __init__(self,n=10):
  3.         self.a = 0
  4.         self.b = 1
  5.         self.n = n
  6.     def __iter__(self):
  7.         return self
  8.     def __next__(self):
  9.         self.a,self.b = self.b,self.a+self.b
  10.         if self.a > self.n:
  11.             raise StopIteration
  12.         return self.a
复制代码

>>> a = Fabri()
>>> for each in a:
        print(each)
1
1
2
3
5
8

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-14 18:43:03 | 显示全部楼层
请问def __iter__(self): return self是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-7-18 13:42:25 | 显示全部楼层
不知不觉把牛哥的总结也都看完了,很不错,感恩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 17:43:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-8 03:00:36 | 显示全部楼层
感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-16 08:59:41 | 显示全部楼层
楼主怎么不继续更新了啊~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-1 14:21:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-23 15:59:19 | 显示全部楼层
青牛兄怎么没继续更新了啊
都是看完视频再过来这里在复习一遍的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 23:13:08 | 显示全部楼层
了解了解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 23:13:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 16:22:58 | 显示全部楼层
raise StopIteration 不应该会抛出一个异常吗?为什么运行的时候只是自动结束迭代,并没有抛出异常?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表