• 自定义模块2


    一、模块是什么

    抖音:20万行代码全部放在一个py文件中?

    为啥不行?

    1、代码太多,读取代码耗时太长。

    2、代码不容易维护。

    所以我们怎么样?

    一个py文件拆分成100份文件,100个py文件又有相似相同的功能,此时你要将100个py文件中相似相同的函数提取出来,input 功能,time.time()、os.path........放在一个文件,当你想用这个功能拿来即用,类似于这个py文件:常用的相似的功能集合:就叫模块。

    模块就是一个py文件

    二、为什么要有模块?

    拿来主义,提高开发效率。

    便于管理维护,

    什么是脚本?

    脚本就是py文件。长期保存代码的文件。

    三、模块的分类

    1、内置模块200种左右:python解释器自带的模块,os、sys、time.........等等。

    2、第三方模块6000种:一些大牛大神写的,非常好用的。pip install 需要这个指令安装的模块,Beautiful_soup,requset,flask,Django等等。。。

    3、自定义模块:自己写的一个py文件。

    四、import 的使用

    import 模块先要怎么样?

    import module 执行一次module这个模块里面的所有代码。

    第一次引用module这个模块,会将这个模块里面所有代码加载到内存,只要你的程序没有结束,接下来你在引用多少次,它会先从内存中查找有没有次模块(第一次就先找了,每次都找),如果已经加载到内存了,就不在重复加载了。

    第一次导入模块发生三件事情

    1、在内存中创建一个以 module(模块名) 命名的名称空间。

    2、执行此名称空间所有的可执行代码(将module.py文件中所有的变量与值的对应关系加载到这个名称空间)

    3、通过module. 的方式引用模块里面的内容,包括变量、函数名、类名。。。。

    被导入模块有独立的名称空间

    它只能操作它空间的内容,不能操作执行文件的内容。

    为模块起别名

    import module as m  # 将 module 模块起名为 m

    简单,便捷。

    有利于模块的简化

    导入多个模块

     

    这样写不好,不利于排错

    import os, time, sys

    正规方法

    import os
    import sys
    import time

    from 。。。 import 。。。

    from module import read
    read()

    它不是在本文件完全创建一个新的函数,而是创建一个变量read但是read指向的是函数还是沿用的module 的 read的内存地址

     

    from 。。import。。与import对比

    from。。import 用起来方便

    from module  import name
    print(name)

    from。。import 容易与本文件的名字产生冲突。后者将前者覆盖

    name = '小杨'
    from module import name   # 在此创建一个变量为name,指向module名称空间的name,会把前一个name覆盖
    print(name)

    当前位置直接使用模块的成员时,仍然以module.py文件全局名称空间

    '''
    module.py文件
    ​
    name = '小杨'
    ​
    def read():
        print('module模块', name)
    ​
    def read1():
        print('module模块')
    ​
    def read2():
        global name
        name = '小明'
    '''
    # 实际上是在自己名称空间中定义了一个read2的变量名,但还是指向的是module名称空间的read2函数的内存地址
    from module import read2  
    name = '测试'
    print(name)     # 我本文件的变量
    read2()         # 还是运行的是module名称空间的函数,所有返回的是 小明
    from module import name   # 在此创建一个变量为name,指向module名称空间的name
    print(name)     # 把前一个覆盖了
    # 输出
    测试
    小明

    五、py文件的两个功能:

    自己用 脚本

    被别人引用 模块使用

    def sum_total(n):
        su = 0
        for i in range(1, n + 1):
            su += i
        return su  # 测试使用返回值
    ​
    ​
    # __name__的值会随着py文件的加载情况不同而改变:
    # 如果py文件作为主体文件运行,则值为__main__
    # 如果作为模块加载,则值为模块的名称(路径)
    if __name__ == '__main__':
        # 本地测试执行此文件时会执行,被其他文件调用时不被执行。
        print(f'测试数字8的和:{sum_total(8)}')  
    学习之旅
  • 相关阅读:
    第46课.继承中的构造与析构
    第45课.不同的继承方式
    第44课.继承中的访问级别
    第43课.继承的概念和意义
    [文件系统]文件系统学习笔记(三)---目录项缓存dentry
    [文件系统]文件系统学习笔记(二)---task_struct
    [文件系统]文件系统学习笔记(一)---基本概念以及inode
    [Linux]进程(十二)--task_struct结构体
    [Linux]进程——用户态编程相关
    [linux]进程(十一)——进程权能
  • 原文地址:https://www.cnblogs.com/XiaoYang-sir/p/14688434.html
Copyright © 2020-2023  润新知