美文网首页
一阶段day11-01模块、迭代器、生成器、文件操作

一阶段day11-01模块、迭代器、生成器、文件操作

作者: ATM_shark | 来源:发表于2018-10-13 15:27 被阅读0次

    一、模块

    1、什么是模块

    Python中一个py文件就是一个模块;
    可以通过 import 或者 from-import 在一个模块中去使用另外一个模块的内容;
    方法:
    import 模块名 ——》将模块中所有的内容导入,并且可以在当前模块中通过“模块名.”的方式去使用模块中的所有全局变量;
    from 模块名 import 变量1,变量2,... ——》将模块中所有的内容都导入,但是只能使用import后面的变量;
    from 模块名 import * ——》将模块中所有内容导入,可以直接使用所有的全局变量;
    代码执行到 import 的时候,会将 import 后面的模块的内容执行一遍;
    ================

    test1 代码内容:
    
    print(__name__)
    test=100
    print('导入了一个新的模块',test)
    def func1():
        print('good morning,everone')
    
    func1()
    print(func1())
    

    ==============
    例如:

    import     test1
    __test1__  #print(__name__)
     #导入了一个新的模块 100   #print('导入了一个新的模块',test)
     good morning,everone      #print('good morning,everone')
     good morning,everone      #func1()
     None         #print(func1())
    #####以上为导入 test1 文件 自动执行的结果
    test1.func1() #good morning,everone
    #####以上为人为执行 test1.func1 的结果
    

    2、模块重命名

    import 模块名1 as 模块新名字 ——》 给模块名1用模块新名字命名,但模块新名字只在当前模块中有用,并没有对其真的改名;
    from 模块名 import 变量名1 as 变量新名字,变量名2 as 变量新名字,...——》给模块部分变量重新命名,但变量新名字只在当前模块中有用,并没有对其真的改名;

    import test1 as jsj
    print(jsj.test)    #100
    from test1 import func1 as hanshu1
    print(hanshu1())   #代码执行的实质是 test1.func1()
    

    3、import

    一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

    4、选择性导入(阻止导入)

    if _ _ name_ _ == '_ _ main_ _' : ——》固定写法
    不希望被别的模块导入执行的代码写在这儿(注意缩进)

    5、什么时候使用模块

    将具有相同的功能的函数和数据封装到一起,使用

    二、迭代器

    1、什么是迭代器

    迭代器是Python中容器类的数据类型。属于序列,没有具体的字面量(即不逐个取出查看,你永远不晓得这个迭代器里有多少个元素,以及元素是什么)。可以将其他的序列转换成迭代器。
    生成语法:iter(序列);

    2、迭代器的特点

    a、只能通过next方法去一个一个的获取迭代器中的元素;
    b、取出一个元素后,迭代器中就不存在这个元素了;
    取出语法:next(迭代器);迭代器._ _ next_ _ ()

    str1='123456abcde'
    iter1=iter(str1)
    print(iter1)   #<str_iterator object at 0x002809B0>    迭代器地址
    print(next(iter1)) #1
    print(next(iter1)) #2
    print(next(iter1)) #3
    print(next(iter1)) #4
    print(next(iter1)) #5
    print(iter1._ _ next_ _ ()) #6
    思考:iter剩下的元素是什么???
    

    三、生成式和生成器

    1、生成器

    生成器就是迭代器,但迭代器不一定是生成器;
    生成式就是生成器的一种特殊形式:(变量 for 变量 in 序列)

    ge1=(x for x in range(10))
    print(ge1)  #<generator object <genexpr> at 0x01DC6E40>
    next(ge1)  #0 把0取出来了,只是未未打印出来
    print(next(ge1)) #1 打印出来了
    print('======')
    for item in ge1:
    
        print(item)   #23456789
    

    2、生成器就是函数体中有yield关键字的函数

    print('========')
    普通函数

    def func1(n):
         for x in range(1,n+1):
             print(x)  #1  2  3
    print(func1(3))   #None
    print('========')
    

    生成器

    def func2(n):
    
        for x in range(1, n + 1):
            print(x)
        yield
    print(func2(5))  #<generator object func2 at 0x00AF6F60>
    
    调用函数不再执行函数体,也不再获取返回值,而是提示你这是一个生成器,返回生成器地址;
    这个函数变成了生成器
    ge2=func2(2)
    next(ge2)    # 1  2
    ge3=func2(3)
    print(next(ge3))    #None    yield返回值默认是None
    
    通过next获取生成器的元素的时候,会去执行生成器对应的函数的函数体,执行遇到yield为止,并将yield后面的值(默认值None)作为返回值(元素),然后保存当前结束位置,下次获取生成器元素的时候会接着上一次结束的位置;

    例如:

    def func2(n):
    
        for x in range(1, n + 1):
            print(x)
            yield  x
    ge4=func2(4)
    print(next(ge4))     此次访问是x=1时
    print(next(ge4))     此次访问是x=2时,且x=1已取出,即不存在于此生成器中
    print(next(ge4))     此次访问是x=3时,且x=1和2已取出,即不存在于此生成器中
    执行过程如下
    '''
    x=1 ,print(1),yield 返回值1,执行结束
    x=2 ,print(2),yield 返回值2,执行结束
    x=3 ,print(3),yield 返回值3,执行结束
    此生成器还剩下x=4
    

    四、文件操作

    使用本地文件可以做数据的持久化(本地化)——》数据库文件、txt文件、json文件、plis他、二进制文件;

    1、文件操作——读写操作

    读——》取出文件中的数据
    写——》将数据写到文件中
    所有文件操作的过程:打开文件——》操作(读、写、保存)文件——》关闭文件

    2、打开文件和关闭文件

    打开文件: open(file,mode="r",encoding=utf—8)
    (1)file——》文件路径,决定需要打开的是哪个文件;
    绝对路径(不推荐使用)
    相对路径:相对路径是相对当前py文件对应的文件夹;格式: ./相对路径
    相对路径是相对当前py文件对应的文件夹的上层文件夹;格式: ../相对路径
    相对路径是相对当前py文件对应的文件夹的上层文件夹的上层文件夹;格式:.../相对路径
    例如: open('./text.txt',"r",encoding='utf-8')
    (2)mode——》文件打开方式(不同的操作对应不同的打开方式)
    "r"——》以只读形式打开文件,文本
    "rb/br"——》读操作,读出来的数据是二进制形式的数据
    "w"——》以写的形式打开文件
    "wb/bw"——》写操作,将二进制数据写入文件
    "a"——》写操作,追加
    (3)encoding——》文本编码方式
    utf—8:几乎支持所有的语言
    gbk:只支持英文
    (4)open函数的返回值,就是被打开的文件对象
    (5)关闭文件: 文件.close()
    例如:text.close()

    3、操作文件

    打开文件
    f1=open('./text.txt',"r",encoding='utf-8')
    
    读文件内容

    文件.read() ——》从文件的读写位置读到文件结束,返回读到的结果;
    文件.readline()——》读一行;
    文件.readlines()——》返回一个列表,列表的元素是文件中每一行的内容;

    content=f1.read()
    print(type(content),content)   #<class 'str'>  娃哈哈wahaha
    f1.close()
    
    文件的写操作
    f2=open("./text.txt","w",encoding="utf-8")
    

    'w'——》将字符串写入文件中,完全覆盖文件原来的内容;
    'wb/bw'——》将二进制写入文件中,完全覆盖文件原来的内容

    f2.write('娃哈哈')    #娃哈哈1
    f2.write(content+"娃哈哈2")   #娃哈哈1娃哈哈2
    f2.write("wahaha")#娃哈哈1娃哈哈2wahaha
    

    相关文章

      网友评论

          本文标题:一阶段day11-01模块、迭代器、生成器、文件操作

          本文链接:https://www.haomeiwen.com/subject/jyqoaftx.html