在Python的基础知识当中,对于类实现可迭代功能有了一种新的方式,而这种方式则有别于我们学.NET等其他高级语言。

在Python当中,目前常用的有两种方式来实现这种迭代器的返回:__iter__ 方式和 __getitem__方式,而这两种方式的区别也很简单明了:

1. __iter__方式返回的是一种可供for这样迭代访问的对象;

2. __getitem__ 方式返回的是可以使用下标方式来对数组、元组访问的对象。

举例说明:

class FibArray:
  def __init__(self):
    self._1, self._2 = 0, 1   def __iter__(self):
    return self   def __next__(self):
  #在执行第一次迭代的时候,先调用一次__next__返回第一个数据。
  #所以,虽然在下面FibArray()是一个类的实例,但是其也是根据类的行为返回一个迭代对象
    self._1, self._2 = self._2, self._1 + self._2
    if self._1 > 100:
      raise StopIteration()
    return self._1 for i in FibArray():
  print(i)

  

输出为:

在此实例当中,有一个对于初学者来说非常难以理解的一点: for i in FibArray(),就对于学过C#和Java语言的同学来说,类名后面跟一个括号这样是一个类的实例化,也就是一个对象,为何能用在这呢?

其实我们可以这样简单的理解就可以了:在for这个语句当中,for是用来迭代的,其访问的对象应该是一个类的迭代器。在FibArray被实例化的时候,根据上下文及内部定义的函数,自动的返回了一个迭代器对象参于到for运算当中。

def __iter__(self):   这句标明了这是一个可迭代的类。def __next__(self):则为迭代去准备数据。

实际当程序执行到for语句时执行的步骤为:

1. FibArray.__init__ 构造函数;

2. FibArray.__iter__ 标志函数,处理迭代器的初步工作;

3. FibArray.__next__ 函数,准备数据返回;

4. print函数;

5. FibArray.__next__ 函数,准备数据返回;

.......

而__getitem__ 则简单的多,而且一般情况下也是一次性的返回到对象当中。如下所示:

class Fib:
def __getitem__(self, n):
a, b = 1, 1
for i in range(n):
a, b = b, a + b
return a f = Fib()
print(f[5])

程序的运行步骤为:

1. 运行至print函数;

2. 调用Fib类的__getitem__函数,并一次性完成数据的处理,返回数据;

3. 传递给print函数,打印数据。

在理解了其不同的工作原理之后,我们才能对症下药,在不同的场合下面应用不同的场景与方法。

Python基础知识当中容易混淆的几个知识点的更多相关文章

  1. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  2. python基础知识(二)

    以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

  3. python 基础知识(一)

    python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...

  4. python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  5. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  6. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  7. python基础知识小结-运维笔记

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...

  8. Python基础知识(五)

    # -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...

  9. Python基础知识(Basic knowledge)

    Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...

随机推荐

  1. linux上安装Docker

    https://blog.csdn.net/qq_36892341/article/details/73918672

  2. linux应用之test命令详细解析

    test命令用法. 功能:检查文件和比较值 1)判断表达式 if test  (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2                  两个表 ...

  3. 混合现实开发教程unity2017

    共52节,MP4格式,英字,大小1GB 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主

  4. Python开发【第十一篇】:MySQL

    数据库介绍 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的API用于创建.访问.管理.搜索和复制所保存的数据.每个数据库都有一个或多个不同的API ...

  5. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  6. 防火墙配置(CiscoPT&GNS3)

    第一部分:扩展ACL 拓扑图 地址表 Device Interface IP address R1 F 0/0 172.16.19.1 F 0/1 10.3.19.1 S 0/0/1 10.1.19. ...

  7. redis学习笔记01 — 基本介绍、安装配置及常用命令

    redis--NoSQL的一种 为了解决高并发.高可用.高扩展.大数据存储等一系列问题而产生的数据库解决方案,就是NoSQL NoSQL,非关系型数据库,全名:Not Only Sql,它不能代替关系 ...

  8. VS code 代码格式整理的配置

    { "workbench.iconTheme": "material-icon-theme", "vetur.validation.template& ...

  9. 微信小程序登录流程

    小程序登录流程 参考 app.js需要做的 1,首先通过wx.login()拿到code,成功之后,发送数据,请求接口,把code发送给后端,换区openid,sessionKey,unionId,把 ...

  10. python websocket 再线聊天室的 Demo

    服务端 import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options import ...