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'
     
  • 相关阅读:
    小程序排错(redis导致)
    linux系统删除-开头文件或目录
    nginx 反向代理
    memcache
    一次故障过程
    json.Decoder vs json.Unmarshal
    ssl中间证书
    作业10:String类
    Angular6如何引入jQuery-knob
    OpenJdk源码下载
  • 原文地址:https://www.cnblogs.com/Jack-Ma/p/8645189.html
Copyright © 2011-2022 走看看