美文网首页
Python-十三、模块

Python-十三、模块

作者: 清风吹雨77 | 来源:发表于2020-03-29 19:47 被阅读0次

    1、什么是模块

    首先我们回顾一下类的结构。
    类:
    -----函数;
    -----变量。

    模块呢?
    模块是最高级别的程序组织单元。
    则模块的结构是这样的。
    模块
    -------函数
    -------变量
    --------------类
    --------------函数
    --------------变量

    模块是最高级别的程序组织单元

    封装模块的目的也是为了把程序代码和数据存放起来以便再次利用。如果封装成类和函数,主要还是便于自己调用,但封装了模块,我们不仅能自己使用,文件的方式也很容易共享给其他人使用。

    使用模块主要有两种方式,一种是自己建立模块并使用,另外一种是使用他人共享的模块。

    2、使用自己的模块

    建立模块,其实就是在主程序的py文件中,使用import语句导入其他py文件。

    2.1、import语句

    我们使用import语句导入一个模块,最主要的目的并不是运行模块中的执行语句,而是为了利用模块中已经封装好的变量、函数、类。

    使用import语句

    下面的案例中,就是两个PY文件,而MAIN文件调用了其中的一个PY文件。

    # 【文件】:story.py
    sentence = '从前有座山,'
    
    def mountain():
        print('山里有座庙,')
    
    class Temple:
        sentence = '庙里有个老和尚,'
        @classmethod
        def reading(cls):
            print('在讲故事,')
    
    class Story:
        sentence = '一个长长的故事。'
        def reading(self):
            print('讲的什么故事呢?')
    
    # 【文件:main.py】
    
    import story as s
    
    for i in range(10):
        print(s.sentence)
        s.mountain()
        print(s.Temple.sentence)
        s.Temple.reading()
        A = s.Story()
        print(A.sentence)
        A.reading()
        print()
    

    当我们需要同时导入多个模块时,可以用逗号隔开。比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件。

    2.2、from ... import ... 语句

    from … import …语句可以让你从模块中导入一个指定的部分到当前模块。

    from ... import ...
    # 【文件】test.py
    
    a = '我是模块中的变量a'
    
    def hi():
        a = '我是函数里的变量a'
        print('函数“hi”已经运行!')
    
    class Go1:  # 如果没有继承的类,class语句中可以省略括号,但定义函数的def语句括号不能省
        a = '我是类1中的变量a'
        @classmethod
        def do1(cls):
            print('函数“do1”已经运行!')
    
    class Go2:
        a = '我是类2中的变量a'
        def do2(self):
            print('函数“do2”已经运行!')
    
    
    【文件】:main.py
    from test import *
    
    print(a)  # 打印变量“a”
    
    hi()  # 调用函数“hi”
    
    print(Go1.a)  # 打印类属性“a”
    Go1.do1()  # 调用类方法“Go1”
    
    A = Go2()  # 实例化“Go2”类
    print(A.a)  # 打印实例属性“a”
    A.do2()  # 调用实例方法“do2”
    

    2.3、if name == 'main'

    # 【文件:xx.py】
    
    代码块 ①……
    
    if __name__ == '__main__':
        代码块 ②……
    
    基础的语法

    这里的【if name == 'main'】就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这是一种程序员达成共识的编码习惯。

    # 我们在main主模块执行,则这句话会被打印出来
    if __name__ == '__main__':
        print('是主模块的时候才会执行以下语句:')
    
    # 我们在main主模块执行,则这句话不会被打印出来
    if __name__ == '__xyz__':
        print('是xyz模块的时候才会执行以下语句:')
    

    3、使用其他人的模块

    在之前的代码中,曾经使用时间和随机数模块,即我们常在第一句代码导入的import time和import random其实就是在导入time和random模块。

    这些模块,就是其他人已经写好的模块。

    3.1、初探借用模块

    time模块和random模块是Python的系统内置模块,也就是说Python安装后就准备好了这些模块供你使用。

    此外,Python作为一门胶水语言,一个强大的优势就是它拥有许多第三方的模块可以直接拿来使用。

    如果是第三方编写的模块,我们需要先从Python的资源管理库下载安装相关的模块文件。

    下载安装的方式是打开终端,Windows用户输入pip install + 模块名;苹果电脑输入:pip3 install + 模块名,点击enter即可。(需要预装python解释器和pip)

    比如说,爬虫时我们会需要用到requests这个库(库是具有相关功能模块的集合),就需要在终端输入pip3 install requests(Mac用户)的指令。

    比如我们打开Python下预置的random模块,我们可以看到其结构如下图:

    random模块

    虽然可以通过看源代码的方式来理解这个模块的功能,但如果想要高效地学会使用一个模块,看源代码并不是最佳选项。

    3.2、如何自学模块

    学习模块的核心是搞清楚模块的功能,也就是模块中的函数和类方法有什么作用,以及具体使用案例长什么样。

    可以阅读官方文档:https://docs.python.org/3.6/library/random.html

    也可以直接百度一下。

    搜到教程后,我们重点关注的是模块中的函数类方法有什么作用,然后把使用案例做成笔记(还记得第8关谈到的如何做学习笔记么?)。

    例如random模块的关键知识(也就是比较有用的函数和类方法),可以做成这样的**案例笔记:**

    import random  # 调用random模块
    
    a = random.random()  # 随机从0-1之间抽取一个小数
    print(a)
    
    a = random.randint(0,100)  # 随机从0-100之间抽取一个数字
    print(a)
    
    a = random.choice('abcdefg')  # 随机从字符串/列表/字典等对象中抽取一个元素(可能会重复)
    print(a)
    
    a = random.sample('abcdefg', 3) # 随机从字符串/列表/字典等对象中抽取多个不重复的元素
    print(a)
    
    items = [1, 2, 3, 4, 5, 6]  # “随机洗牌”,比如打乱列表
    random.shuffle(items)
    print(items)
    
    自学模块的方法

    3.3、实战:学习csv模块

    csv是一种文件格式,可以把它理解成“简易版excel”。学会了csv模块,就可以用程序处理简单的电子表格了。

    使用import语句导入csv模块,然后用dir()函数看看它里面有什么东西:

    import csv
    # dir()函数会得到一个列表,用for循环一行行打印列表比较直观
    for i in dir(csv):
        print(i)
    

    但是我们不懂这些函数,咋办?我们可以去官网或百度找到的中文文档中查找。

    官方教程:https://docs.python.org/3.6/library/csv.html

    中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv

    通过阅读实例,我们可以掌握一些简单的用法:

    简单的CSV使用实例

    3.3.1、读取csv数据

    新建一个test.csv,里面存储下列数据。

    商品数据
    import csv
    
    with open('d:\\test.csv', newline = '', encoding = 'utf-8')  as f:
        #参数encoding = 'utf-8'防止出现乱码
        readcsv = csv.reader(f)
        for row in readcsv:
            print(row)
    

    3.3.2、写入csv数据

    写入csv数据的语法

    先创建一个变量名为writer(也可以是其他名字)的实例,创建方式是writer = csv.writer(x),然后使用writer.writerow(列表)就可以给csv文件写入一行列表中的内容。

    还是上面的test.csv中的上品数据,我们尝试用writerow()方法为它追加写入两行列表:['4', '猫砂', '25', '1022', '886']、['5', '猫罐头', '18', '2234', '3121']。

    思路,首先我们需要回忆open函数中是如何做读、写、追加的。

    open()函数

    我们看到,追加是用的a,写入是xxx.writerow[x,x,x],则代码如下:

    import csv
    with open('test.csv','a', newline='',encoding='utf-8') as f:
        writer  = csv.writer(f)
        writer.writerow(['4', '猫砂', '25', '1022', '886'])
        writer.writerow(['5', '猫罐头', '18', '2234', '3121'])
    

    写在最后:

    学到这里,已经掌握了不少的知识,成为一个真正的菜鸟了。

    老师建议补一部电影:《互联网之子》。

    谨记格言。


    时代周刊的格言 腾讯传的格言

    编程世界它严谨但绝非枯燥,它有着一个非常崇高的精神内核——关乎自由,平等,共享,利他主义。

    这是一件在人类历史上前所未有的事:曾有许多伟大人物构想过这样的社会结构,并为此做出努力,但都是不具备现实意义的乌托邦。

    仰望星空到这一步的人,常会在心底埋下一颗种子:期望有一天,也能自己做出一些漂亮的轮子,给他人使用。

    希望这颗种子在你心里有一天也能生根、发芽、开花、结果,让开源精神延绵不绝。

    相关文章

      网友评论

          本文标题:Python-十三、模块

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