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__':
    

      

  • 相关阅读:
    获取页面元素的xpath,验证自己写的xpath,不用工具不用插件,看完这篇保证你学会!
    Python判断IEDriverServer是否最新版本并自动更新
    Python判断软件版本号的大小
    selenium通过加载火狐Firefox配置文件FirefoxProfile,实现免登陆访问网站
    mysql查询每个学生的各科成绩,以及总分和平均分
    selenium点击(click)页面元素没有反应(报element not interactable)的一个案例
    Python查询物理主机上所有虚拟机并保存为excel,通过标记批量启动
    Python线程池下载txt
    Python自动下载最新的chromedriver
    django的url的name参数的意义
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9206891.html
Copyright © 2011-2022 走看看