九.魔法方法、特性和迭代器

0.Python中双下划线__有特殊意义。

1.构造函数和析构函数:

class Test:
    def __init__(self): #构造函数,创造实例默认执行
        pass
    def __del__(self):  #析构函数,程序全部运行完执行
        pass

2.类的序列和映射协议,让类的实例可以实现类似序列的操作。

class Test:
    # 构造函数,创造实例默认执行
    def __init__(self):
        self.date={} #这个方法通常要设置字典为数据类型
        print("Default start")
    # 析构函数,程序全部运行完执行
    def __del__(self):
        print("Default end")
    # 让实例可直接设置:A[key]=...
    def __setitem__(self, key, value):
        self.date[key]=value
    # 让实例可直接访问:A[item]
    def __getitem__(self, item):
        return self.date[item]
    # 让实例可直接运行del A[key]
    def __delitem__(self, key):
        del self.date[key]
    # 让实例可直接运行len(A)
    def __len__(self):
        return len(self.date)
A=Test()
#默认运行实例中的__setitem__
A["k1"]="abc"
A["k2"]="ABC"
#默认运行实例中的__getitem__
print(A["k1"],A["k2"]) #abc ABC
print(A.date) #{‘k1‘: ‘abc‘, ‘k2‘: ‘ABC‘}
#默认运行实例中的__len__
print(len(A)) #2
#默认运行__delitem__
del A["k1"]
print(A.date) #{‘k2‘: ‘ABC‘}

3.类中函数property,通过设置property能够实现类中某些函数.

class C:
    def __init__(self):
        self._x = 123
    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I‘m the ‘x‘ property.")
c=C()
print(c.x) #c.x will invoke the getter
c.x=456 #c.x = value will invoke the setter
del c.x #del c.x the deleter

4.迭代器,一层层访问数据,不同于列表要把全部数据加载到内存

it=iter(range(10))    #iter()函数获得一个迭代器
print("first",it.__next__())
print("second",it.__next__())
print("third",it.__next__())
print(next(it))
print(next(it))
class TestIterator:
    def __init__(self):
        self.value=0
    def __next__(self):   #必须要有__iter__方法才可以实现迭代
        self.value+=1
        if self.value>10: raise StopIteration
        return self.value
    def __iter__(self):   #__iter__方法让类成为迭代器,包含__next__方法
        return self          #可以不用设置其他参数
TI=TestIterator()
print(list(TI))

5.生成器,包含yield语句的函数都被称为生成器

  • 生成器不是使用return返回一个值,而是可以生产多个值,每次一个。每次使用yield生成一个值后,函数都将冻结,等待下次调用。
  • 应用如下:

    datelist=[[1,2,3],[4,5],[6]]
    def generator(date):
        for i in date:
            for j in i:
                yield j
    #generator(datelist)生成器是以迭代的形式推进数据,而不是数据全部处理好一个一个调用。大数据时能省内存
    for ii in generator(datelist):
        print(ii, generator(datelist))

原文地址:https://www.cnblogs.com/i201102053/p/10626354.html

时间: 2024-10-07 14:56:31

九.魔法方法、特性和迭代器的相关文章

十、魔法方法、特性和迭代器

魔法方法:开头和结尾都是两个下划线 特性(property) 迭代器(iterator) 1.构造函数 构造函数,即初始化方法,只是命名为__init__. 构造函数不同于普通方法的地方在于,将在对象创建后自动调用它们. 在Python中,创建构造函数很容易,只需将方法init的名称从普通的init改为魔法版__init__即可. 说明:在所有的Python魔法方法中,__init__是平常使用最多的. 扩展:Python提供了魔法方法__del__,也称作析构函数(destructor),这个

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第09章 | 魔法方法、属性和迭代器

这一章,有点抽象,看着有点蛋疼! 双下划线__future__或单下划线有特殊含义,在Python中,这些名字的集合称为魔法方法:最重要的是__init__和一些处理访问对象的方法,这些方法允许你创建自己的序列或者是映射. ------ 准备工作: 将__metaclass__=type放在模块的最开始位置,以确保类时最新式的.考虑下面两个类 class NewStyle(object): more_code_here class OldStyle: more_code_here 如果文件以__

《Python基础教程(第二版)》学习笔记 -&gt; 第九章 魔法方法、属性和迭代器

准备工作 >>> class NewStyle(object): more_code_here >>> class OldStyle: more_code_here 在这两个类中,NewStyle是新式的类,OldStyle是旧式的类,如果文件以__metaclass__ = type 开始,那么两个类都是新式类. 构造方法 构造方法,当一个对象被创建后,会立即调用构造方法.Python中创建一个构造方法,只要把init方法的名字从简单的init修改成__init__

python基础教程_学习笔记11:魔法方法、属性和迭代器

魔法方法.属性和迭代器 在python中,有的名称会在前面和后面各加上两个下划线,这种写法很特别.它表示名字有特殊含义,所以绝不要在自己的程序中使用这种名字.在python中,由这些名字组成的集合所包含的方法叫做魔法(或称特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下被python调用,而几乎没有直接调用它们的必要. 准备工作 为了确保类是新型的,应该把赋值语句__metaclass__=type放在你的模块的最开始,或者(直接或间接)子类化内建类(实际上是类型)ob

python魔法方法、构造函数、序列与映射、迭代器、生成器

在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将在对象创建后自动调用它们.也就是在对象创建完成后,自动会调用__init__方法来初始化. 创建一个构造方法 构造方法传参 >>> class FooBar: def __init__(self,value=42): #默认参数 self.somevar = value >>&g

《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器(上)

构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ...     def __init__(self): ...         self.somevar=42 ... >>> f=FooBar() >>> f.somevar 42 给构造方法传几个参数 >>> class FooBar: ...     def __in

Python3 魔法方法:迭代器

0.什么是迭代器 迭代器不是容器,而是实现了__next__方法的对象(用于遍历容器中的数据) 在python原生支持的数据结构中set(集合)是仅支持迭代器访问的,不支持下标(index)访问 1.相关的BIF iter() 将一个可迭代对象转换成一个迭代器 next() 访问迭代器中的下一个变量,如果迭代器没有变量了,则返回StopIteration异常 2.魔法方法 __iter__(self) 返回迭代器本身 __next__(self) 决定迭代的方法 3.例题: 用while语句实现

课时48:魔法方法:迭代器

目录: 一.迭代器 二.课时48课后习题及答案 ************* 一.迭代器 ************* 迭代的意思类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代得到的结果会被用来作为下一次迭代的初始值.提供迭代方法的容器称为迭代器,通常接触的迭代器有序列(列表.元组.字符串)还有字典也是迭代器,都支持迭代的此操作. 举个例子,通常使用for语句来进行迭代: >>> for i in "FishC": print(i) F i s h C 字