魔法方法也为特殊方法,即用两个下划线形成的(__方法__)。自己定义的方法最好不要采用这种方式,因为这些方法会在一些特殊的情况下直接被调用。

1、第一个魔法方法:类中常用的__init__()方法:相当于其他语言中的构造函数,用来初始化参数

当类的一个对象被创建之后会立即调用构造函数。

2、迭代器:__iter__ ,所谓的迭代器就是具有next方法的对象。在调用next方法时会返回它的下一个值,若next函数被调用时没有值被返回会引发一个StopIteration异常。

迭代器协议:对象需要提供next()函数返回迭代下一项的值,如果没有值了,就输出一个StopIteration异常终止迭代。

可迭代对象:实现了迭代器协议的对象。比如:列表、元祖、字典等,但需要用iter()作用于它们才可以成为迭代对象。

for item in Iterable原理:先调用iter()函数将Iterable(可迭代对象)变成一个迭代器,然后调用next()作用于生成的迭代器来获取下一项赋值给item,当遇到StopIteration异常就停止迭代。

迭代器首先需要提供一个可迭代对象,比如一个列表

g为一个迭代器,此时调用next(g)可以输出1,再调用next(g)输出2,再调用next(g)输出3,即遍历了一次迭代器,如果再调用next(g)输出StopIteration异常。

3、生成器:任何包含yield语句的函数成为生成器,生成器也是一个迭代器。yield作用类似return但很不同,yield返回的是生成器,每次产生很多值。

作用:延迟产生结果,不是立即产生结果,而是使用时才产生。

生成器只能遍历一次。

第一类:生成器函数:使用 def 定义函数,但是,使用yield而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。

for i in range(1,5):

  yield i**2

第二类:生成器表达式:类似于列表推导,只不过是把一对大括号[]变换为一对小括号()。但是,生成器表达式是按需产生一个生成器结果对象,要想拿到每一个元素,就需要循环遍历。

# 生成器generator,类似于list,但是是把[]改为()
gen=(a for a  in range(1,10))

最新文章

  1. 扩展easyUI tab控件,添加加载遮罩效果
  2. HDU 3341 状态压缩DP+AC自动机
  3. [转] 接触C# 反射 2
  4. [转]DataGridView绑定泛型List的种种
  5. (转)iOS keychain API及其封装
  6. php 二级级联菜单
  7. Android Studio 使用wifi调试插件
  8. Spring boot之hello word
  9. counter counters 计数器
  10. LayaBox IDE 安装后执行项目报错解决方案的一些记录
  11. Python学习笔记之函数式编程
  12. android笔记---百度地图api应用 (一)
  13. 基于jQuery仿迅雷影音官网幻灯片特效
  14. Eclipse导入web项目发布项目时报Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web错误解决方案
  15. 现在很火的数据科学到底是什么?你对做DATA SCIENTIST感兴趣吗?
  16. springboot2.0 快速集成kafka
  17. python 正则匹配中文(unicode)(转)
  18. C++的句柄类
  19. 【Android开发】 HttpURLConnection.getOutputStream() IO异常
  20. jitter buffer QoS的解决方案

热门文章

  1. Spring 单例模式和多例模式
  2. (10)Spring Boot修改端口号【从零开始学Spring Boot】
  3. MS SQL 迁移数据库文件
  4. Spark MLlib LDA 基于GraphX实现原理及源代码分析
  5. iOS 8 模糊视图(毛玻璃效果)的简单实现UIVisualEffectView
  6. 第一次Java作业——简单的登录界面
  7. 网络 - 网关的作用、DNS的作用
  8. 开源DDos 机器学习思路求解的一些源码——TODO 待分析
  9. typeof、instanceof、hasOwnProperty()、isPrototypeOf()
  10. numpy快速指南