zoukankan      html  css  js  c++  java
  • 第九节课 迭代器生成器、模块和包

    一、列表推导式

      10以内的偶数

    li=[0,2,4,6,8,10]
    
    li=list(range(0,11,2))

      也可以用循环

    li=[]
    for i in range(0,11,2):
        li.append(i)
       print(li)

      也可以用列表推导式

     
    原式:
    li=[]
    for i in range(21):
       if i%2==0:
             li.append(i)
    相当于:
    li2=[i for i in range(21) if i%2==0] #第一个i相当于append后的那个元素
    
    li3=['a' for i in range(21) if i%2==0] #如果你是偶数,就在列表里加一个'a'
    
    li4=[i if i%2==0 else 'a' for i in range(21)] #若满足偶数则添加一个i,否则就添加一个'a'.要添加多个条件必须把for放后面
     

    二、迭代器和生成器

      1、迭代器

        迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法。
        其中__iter__()方法返回迭代器对象本身;__next__()方法返回容器的下一个元素,在结尾时引发StopIteration异常。

     
    li=[1,2,3] # 只有iter,没有next,就不是一个迭代器
    
    li[1] #返回索引1的元素,2
     
    li.__iter__() #将li返回为迭代器本身(将li变成一个迭代器),有个内饰函数iter作用一样
    
    g=li.__iter__() #赋值
    
    内置函数:next()
    next(g)  #返回索引0的值,实现迭代器的作用,跟g.__nest__()作用一样
    next(g)  #返回索引0的值
    next(g)  #返回索引0的值
    next(g)  #报错StopIteration
    
    备注:必须将iter()后的值赋值给一个变量,否则会重新定义
    
    循环:
    g=iter(li)
    for i in g:
        print(i,end=' ')
    输出:1 2 3
     

      2、生成器  generator

     
    def fun():
        i=1
        while i<5:
            print(i)
            yield 'stop'   #加了这边便将fun()变成一个迭代器,在调用next()是起到阻断器的作用(暂停),加了'stop'(类似于return对的作用,也会输出'stop')。总上言之,就是实现了生成器的功能:暂停,返回值
            i+=1
            print('aaa',i)
    
    next() #输出 1
    next() #输出  aaa 2
                        2
    next() #输出:aaa 3
                        3
    
    生成器本质上是个迭代器
     
     
    斐波拉契数
    1,1,2,3,5,8,13,21,34,。。。
    用生成器来写斐波拉契数
    def fib(num):
        n=0  #表示几代
        a,b=0,1
        while n<num:
            print(b) #b表示那一代的量
            if n%10==0:
                yield #加个生成器便可以一个一个看
            a,b=b,a+b
            n+=1 
     

    三、模块和包

      模块:py文件

      包:很多py文件放在一个文件夹里

      方法:函数

      属性:变量名

      1、内置模块

      2、第三方模块

      3、模块的导入

    import copy #导入整个模块
    
    from copy import deepcopy #导大模块里面的小模块,节省内存,指定导入

        也可用cmd.exe的pip导入

      4、自定义模块

        相同路径:可直接导入文件名

        不同路径:借助一个其他的模块sys sys.path会从你的python安装路径找

    import sys #调用sys函数
    sys.path #搜索您python文件夹里所有py文件的路径
    sys.path.append(r'绝对路径')  #将你的绝对路径导入
    import 绝对路径里的模块 #然后就可以调用模块了    

        __main__ 的意义:
        当文件是直接运行是,文件的__name__是__main__ ,当文件是被导入时,__name__是文件名

      

  • 相关阅读:
    树链剖分 (模板) 洛谷3384
    ST表 (模板) 洛谷3865
    IOI 2005 River (洛谷 3354)
    IOI 2005 River (洛谷 3354)
    poj1094 Sorting It All Out
    poj1094 Sorting It All Out
    spfa(模板)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    洛谷1850(NOIp2016) 换教室——期望dp
  • 原文地址:https://www.cnblogs.com/sysun110/p/11267588.html
Copyright © 2011-2022 走看看