| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> python描述符、生成器、迭代器、定制序列 -> 正文阅读 |
|
[开发工具]python描述符、生成器、迭代器、定制序列 |
1.属性访问 ?对象有一个特殊的属 性,称为_ _dict_ _,它的作用是以字典的形式显示出当前对象的所有属 性以及相对应的值。 描述符(descriptor),用一句话来解释,描述 符就是将某种特殊类型的类的实例指派给另一个类的属性。那什么是特殊类型的类呢?就是至少要在这个类里边定义_ _get_ _()、_ _set_ _()或_ _delete_ _()三个特殊方法中的任意一个。 ?访问属性的时候,python 会自动调用__get__()方法。几个参数内容分别是:self是描述符类自身的实例;instance是这个描 述符的拥有者所在的类的实例,在这里也就是Test类的实例;owner是 这个描述符的拥有者所在的类本身。 对属性进行赋值操作的时候,Python会自动调用_ _set_ _()方法, 前两个参数与_ _get_ _()方法是一样的,最后一个参数value是等号右边 的值。 del操作也是同样的道理 property 事实上就是一个描述符类
?
2.定制序列 在Python中,像序列类型(如列表、元组、字符串)或映射类型 (如字典)都属于容器类型. ? 如果希望定制的容器不可变,则只需要定义_ _len_ _()和_ _getitem_ _()方法。 ? 如果希望定制的容器是可变的,除了_ _len_ _()和_ _getitem_ _() 方法,还需要定义_ _setitem_ _()和_ _delitem_ _()两个方法。 ?自定义不可变列表
3.迭代器 提供迭代方法的容器称为迭代器,通常接触的迭代器有序列(如列表、元组、字符)、字典等,它们都支持迭代的操作。关于迭代,Python提供了两个BIF:iter()和next()。 对一个容器对象调用iter()就得到它的迭代器,调用next()迭代器就会返回下一个值,然后怎么样结束呢?如果迭代器没有值可以返回了, Python会抛出一个名为StopIteration的异常。关于实现迭代器的魔法方法有两个:_ _iter_ _()和_ _next_ _()。 一个容器如果是迭代器,那就必须实现_ _iter_ _()魔法方法,这个方法实际上就是返回迭代器本身。
4.生成器 生成器的学习,并不涉及魔法方法,甚至它巧妙地避开了类和对象,仅通过普通的函数就可以实现。 生成器其实是迭代器的一种实现 Python是通过生成器来实现类似于协同程序的概念:生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后再次调用它的时候, 从上次暂停的位置继续执行下去。
生成器表达式 列表推导式(list comprehensions)也叫列表解析,灵感取自函数式编程语言Haskell,它是一个非常有用和灵活的工具,可以用来动态地创建列表
字典推导式(dictionary comprehension)
集合推导式(set comprehension)
如果将生成器表达式作为函数的参数使用的 话,可以直接写推导式,而不必加小括号:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:58:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |