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__是文件名

      

  • 相关阅读:
    原生态ajax
    用js提交表单,没有submit按钮如何验证,使用button提交方法
    易买网吐血文档(图片拖不上来,要文档留下联系)
    时序图Sequence DiaGram
    starUML用例图
    泛型自动扩容的原理
    深入C#数据类型
    了解.NET框架
    自定义jstl标签实现页面级的权限控制
    SharePoint 2013 REST 服务使用简介
  • 原文地址:https://www.cnblogs.com/sysun110/p/11267588.html
Copyright © 2011-2022 走看看