zoukankan      html  css  js  c++  java
  • 09-迭代器、模块

    1.迭代器和生成器

    1.迭代器

        迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()__next__()方法。
        其中__iter__()方法返回迭代器对象本身;__next__()方法返回容器的下一个元素,在结尾时引发StopIteration异常。
    2.生成器generator
        Python中,使用生成器可以很方便的支持迭代器协议。
        生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。   
        也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。
        生成器函数返回生成器的迭代器。 “生成器的迭代器”这个术语通常被称作”生成器”。
        要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法,
        其中一个就是__next__()。如同迭代器一样,我们可以使用__next__()函数来获取下一个值。
        
        在一个 generator function 中,如果没有 return,则默认执行至函数完毕,如果在执行过程中 return
        则直接抛出 StopIteration 终止迭代。   

    2.模块和包

    1.内置模块
        本身就带有的库,就叫做Python的内置的库。(模块==库)
        一些常见的内置模块
        os 和操作系统相关   os.path
        sys 和系统相关     sys.path  
            sys.path.append(r'')    可以添加路径
        re  正则表达式 
        
    2.第三方模块
        Python本身自带的库,就是所谓的第三方的库
            
    3.模块的导入
        import xxx  [as  yy]
        from ../xx  import  xx  [as  yy]      
    4.自定义模块
        py文件,可以做为一个模块来用,直接作为一个模块导入就行
        __main__ 的意义:
            当文件是直接运行,文件的__name____main__ ,当文件是被导入时,__name__是文件名
    5.包管理
        基本上就是另外一类模块。把用来处理一类事物的多个文件放在同一文件夹下组成的模块集。       
        导入包和模块是一样的方法,包导入后会在目录中自动生成__pycache__文件夹存放生成的.pyc文件,要注意的是import后面的才是存在当前作用域中的对象名,from是告诉python从什么地方导入,
        使用sys.path添加文件的目录路径。
     

    常用模块

    Os模块

    环境变量函数

    os.name  #如果是windows操作系统返回’nt’,如果是其他系统则返回 ‘posix’
    os.environ #返回系统的环境变量,以dict形式显示

    文件操作函数

    #os模块给我们提供我们和操作系统交互的方式
    os.getcwd() #返回当前工作目录
    os.chdir(path) #改变工作目录
    os.listdir(path=’.’) #列举指定目录中的文件名(‘.’表示当前目录,’..’代表上一级目录)
    os.mkdir(path) #创建单层目录,如该目录已存在抛出异常
    os.makedirs(path) #递归创建多层目录,如果该目录已经存在则抛出异常。
    os.remove(path) #删除文件
    os.rmdir(path) #删除单层目录,如改目录非空则抛出异常
    os.removedirs(path)#递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。
    os.rename(old,new) #将文件old 重命名为new,文件和目录都使用这条命令
    os.path #模块中关于路径常用的函数使用方法:
    os.path.basename(path) #去掉目录路径,单独返回文件名
    os.path.dirname(path)  #去掉文件名,单独返回目录路径
    os.path.join(path1,path2) #将path1,path2各部分组合成一个路径名
    os.path.split(path)#分割文件名和路径,返回(f_path,f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在。
    os.path.splitext(path)#分离文件名与扩展名,返回(f_name,f_extension)元组
    os.path.getsize(file)#返回指定文件的尺寸,单位是字节
    os.path.getatime(file)#返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
    os.path.getctime(file)#返回指定文件创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
    os.path.getmtime(file)#返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)返回True或False的函数
    os.path.exists(path) #判断指定路径(目录或文件)是否存在 
    os.path.isabs(path) #判断指定路径是否为绝对路径 
    os.path.isdir(path) #判断指定路径是否存在且是一个目录
    os.path.isfile(path) #判断指定路径是否存在且是一个文件

    shutil模块

    #复制文件
    shutil.copyfile(oldfile’,newfile’) #oldfile和newfile都只能是文件
    shutil.copy(oldfile’,newfile’) #oldfile只能是文件,newfile可以是文件也可以是目标目录
    #复制文件夹
    shutil.copytree(olddir’,newdir’) #olddir和newdir都只能是目录,且newdir必须不存在移动文件(目录)
    shutil.move(oldname’,newname’)
    #删除目录
    os.rmdir(dir’)#只能删除空目录
    shutil.rmtree(dir’)#空目录,有内容的目录都可以删

    sys模块

    sys.argv
    #用来向python解释器传递参数,名曰“命令行参数”
    sys.exit() 
    #退出当前程序
    sys.stdout
    #与Python中的函数功能对照,sys.stdin获得输入,等价于python2中的raw_inpurt(),python3中的input(),sys.stdout负责输出
    sys.path
    #返回python目录下所有.pth路径文件下的内容集系统默认设置。可以通过列表的操作对其进行修改,不过这种更改只对当前的程序起作用。

    time模块

    >>> import time  #python中最基本的时间模块
    >>> time.time()   #时间戳  (1970年1月1日00:00:00后经过的浮点秒数)
    1501415142.9751205
    >>> time.localtime()  #本地时间  返回时间元组
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=30, tm_hour=19, tm_min=45, tm_sec=56, tm_wday=6, tm_yday=211, tm_isdst=0)
    #返回的元组的内容:
    #索引值(index) 属性(attribute)            值(value)
    #0              tm_year(年)              例如:2016
    #1             tm_mon(月)                1~12
    #2             tm_mday(日)               1~31
    #3             tm_hour(时)               0~23
    #4             tm_min(分)                0~59
    #5             tm_sec(秒)                0~61
    #6             tm_wday(星期几)        0~6(0代表星期一)
    #7             tm_yday(一年中的第几天)      1~366
    #8             tm_isdst(是否为夏令时)  0,1,-1(-1代表夏令时)
    time.asctime([t]) #接收时间元组并返回一个可读的形式
    >>> time.asctime(time.localtime())
    'Sun Jul 30 19:55:05 2017'
     
  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/Jack-Ma/p/8645189.html
Copyright © 2011-2022 走看看