Python笔记17---------魔法方法
魔法方法也为特殊方法,即用两个下划线形成的(__方法__)。自己定义的方法最好不要采用这种方式,因为这些方法会在一些特殊的情况下直接被调用。
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))
最新文章
- 扩展easyUI tab控件,添加加载遮罩效果
- HDU 3341 状态压缩DP+AC自动机
- [转] 接触C# 反射 2
- [转]DataGridView绑定泛型List的种种
- (转)iOS keychain API及其封装
- php 二级级联菜单
- Android Studio 使用wifi调试插件
- Spring boot之hello word
- counter counters 计数器
- LayaBox IDE 安装后执行项目报错解决方案的一些记录
- Python学习笔记之函数式编程
- android笔记---百度地图api应用 (一)
- 基于jQuery仿迅雷影音官网幻灯片特效
- Eclipse导入web项目发布项目时报Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web错误解决方案
- 现在很火的数据科学到底是什么?你对做DATA SCIENTIST感兴趣吗?
- springboot2.0 快速集成kafka
- python 正则匹配中文(unicode)(转)
- C++的句柄类
- 【Android开发】 HttpURLConnection.getOutputStream() IO异常
- jitter buffer QoS的解决方案
热门文章
- Spring 单例模式和多例模式
- (10)Spring Boot修改端口号【从零开始学Spring Boot】
- MS SQL 迁移数据库文件
- Spark MLlib LDA 基于GraphX实现原理及源代码分析
- iOS 8 模糊视图(毛玻璃效果)的简单实现UIVisualEffectView
- 第一次Java作业——简单的登录界面
- 网络 - 网关的作用、DNS的作用
- 开源DDos 机器学习思路求解的一些源码——TODO 待分析
- typeof、instanceof、hasOwnProperty()、isPrototypeOf()
- numpy快速指南