自定义模块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)}')  
学习之旅
原文地址:https://www.cnblogs.com/XiaoYang-sir/p/14688434.html