zoukankan      html  css  js  c++  java
  • 潭州课堂25班:Ph201805201 第十五课 迭代器,生成器 (课堂笔记)

     推导表达式

    li1 = list()
    for i in range(10):     #  迭代循环内容
        li1.append(i)
    print( li1 )
    
    ----》》》    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    
    li2 =[i for i in range(10)]     #   推导表达式的语法
    #  列表元素,  for 循环
    print(li2)
    
    ----》》》    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


    li3= ['bin' for i in range(6)]
    # 列表元素, for 循环

    print(li3)

    ----》》》   ['bin', 'bin', 'bin', 'bin', 'bin', 'bin']

       推导表达式 加判断  

    for i in range(10):
        if i % 2 == 0:
            li4.append(i)
    print(li4)
    
    ----》》》》         [0, 2, 4, 6, 8]
    
    li5 = [i for i in range(10) if i % 2 == 0 ]  三元表达式
    # 添加的值,for 循环, 判断/条件 print(li5)
    ----》》》》 [0, 2, 4, 6, 8]

    迭代器:

    1,迭代器协议:对象必须提供一个 next 方法,执行该方法后要么返回迭代的下一项,要么就引起 Stoplteration 异常,
    以终止迭代,(只能往后走,不能往前找,)

    2,可迭代对象:实现了地带协议的对象,(如何迭代对象内部定义一个 __iter__() 方法)

    3,协议是一种约定,可迭代对象实现了迭代协议,python 的内部工具(如 for 循环,sum,min,max海曙)
    使用迭代器访问对象,

     for 循环原理:

      l = [1,3,4]

    for i in l:
    print(i)
    原理:
    将 iter(l) 的值 进行 next 方法

    生成器有两种表现形式:

      生成器表达 式,

          yy =( i for i in range(10) ) 与推导表达 式不同之处在于【】和()

      函数形式

         def test():

          yield  1

          yield  2

        yield  取代了 return 

         函数中 只要有  yield,其运行就得到生成器,

         生成器自动实现了迭代器协议,(iter)

    def cy(*args):
        count = 0
        while 1:
            if count < len(args):
                yield args[count]
                count += 1
            else:return StopAsyncIteration
    

      

     生成器   
    #   列表生成式
    a = [ x for x in range(10)]
    print(a)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    #   列表生成式
    def f (n):
        return n**3
    a = [ f(x) for x in range(10)]
    生成器:
    a = (x for x in range(10))
    print(a)
    print( next(a) )
    print( next(a) )
    print( next(a) )
    生成器:
    
    a = (x for x in range(10))
    for i in a:
        print( i )
    
    生成器:
    def y ():
        yield 1
    
    
    
    def y ():
        print('1')
        yield 1
        print('2')
        yield 2
    
    # a = (x for x in range(10))
    # for i in a:
    #     print( i )
    for i in y():
        print(i)
    
    
    
    
    斐波那契数列:
    def f (x):
        n, a, b = 0, 0, 1
        while n < x :
            print( b )
            a, b = b ,a + b
            n += 1
    
    y = int (input(''))
    f ( y )
    
    :  yield 的enxt 方法
    def f (x):
        n, a, b = 0, 0, 1
        while n < x :
            yield a
            a, b = b ,a + b
            n += 1
    
    g = f (5)
    print( g )
    print( next(g) )
    print( next(g) )
    print( next(g) )
    print( next(g) )
    
    
    :send  
    def fo ():
        print('123')
        m = yield 1
        print( m )
        yield 2
    
    n = fo()
    n.send ( None )  ##   等于  next(b)
    n.send ( 'abc' )
    
    
    
    迭代器,:  生成器都是迭代器
    l = [1,3,4,5]
    b = iter(l)
    
    
    :  itter:  返回个可迭代对象
    l = [1,3,4,5]
    b = iter(l)
    print(b)
    print( next(b) )
    for i in b:
        print(i)
    

      

    模块

    1. time 
    import time
    # time.sleep(2)       # ****
    # print(time.time())      #    ****
    # print( time.gmtime())    ##   世界标准时间
    # print( time.localtime())    ##  电脑里的时间 ******
    # print(time.clock())
    
    st = time.localtime()                              ##   显示时间格式化   *********
    print( time.strftime('%Y--%m--%d %H:%M:%S',st ))    ##
    
    print(time.strptime('2018--04--25 17:33:14', '%Y--%m--%d %H:%M:%S'))        
    a = time.strptime('2018--04--25 17:33:14', '%Y--%m--%d %H:%M:%S')       ##   单独取出时间如 年
    print( a[0])
    print( a.tm_year)
    
    print( time.ctime())
    
    
    import datetime
    print( datetime.datetime.now() )
    
    2,random    随机函数
    import random
    print( random.random() )
    print( random.randint(1,10) )
    print( random.choice( 'hello') )
    print( random.randrange( 1,10) )
    
    3,os 系统操作 import os print(os.getcwd()) ## 获取工作目录 os.chdir(r'c:users') ## 改变工作目录 print(os.curdir) ## 当前目录 print(os.pardir) ## os.makedirs('a\b\c') ## 递归创建文件夹 os.mkdir('a') ## 创建文件夹 os.removedirs('a\b\c') ## 删除文件夹 os.removedirs('a\b\c') ## 递归删除文件夹 a = os.listdir( r'E:pycharm201804' ) ## 展示出目录里的全部 print( a ) os.remove( '1.png' ) ##删除文件 os.rename('set.py','装饰器.py') ## 重命名文件‘酒文件名’,‘新文件名’ q = os.stat('666.py') ## 获取文件信息 print(q) print( os.sep ) ## os.linesep ## 换行 os.environ ## 获取环境变量 os.path.dirname('201804/3.py') ## 获取文件所在的目录 os.path.join(a,b) ### 路径拼接 os.path.getatime() ## 最后一次存取时间 os.path.getmtime() ## 最后一次修改时间
    4, sys import sys 5, hashlib 加密 import hashlib m = hashlib.md5 ## 加密算法 m.update( 'hello'.encode('utf8')) ##对 hello 加密 print( m.hexdigest() ) ## 加密后. s = hashlib.sha256() ## 加密算法

      

      模块调用 

    #  模块的调用:
    import  模块名
    import  模块名 ,模块名
    from  模块名 import 方法(函数名)
    from  模块名 import *
    from  模块名 import 方法(函数名)as 新方法
    
    ##   包的调用
    import 包名 import 模块名
    import 包名.包名  import 模块名
    import 包名.包名.模块名  import 方法
    from 包名 import 模块名
    __file__		相对路径的内置变量
    import os
    os.path.dirname( os.path.abspath(__file__) )
    	上一级(得到绝对路径)
    
    if __name__ == '__main__':
    

      

  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9206891.html
Copyright © 2011-2022 走看看