抖音: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)}')