zoukankan      html  css  js  c++  java
  • 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 in range(1,10))

  • 相关阅读:
    XMU1349 xmu_1349
    字符串排序
    linux磁盘文件与目录管理系统(2)
    poj 3667 Hotel
    poj 3468 A Simple Problem with Integers
    linux文与目录管理
    Linux的磁盘与文件管理系统(1)
    hdu 1698 Just a Hook
    poj3225 Help with Intervals
    poj 2886Who Gets the Most Candies?
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/8658519.html
Copyright © 2011-2022 走看看