python模块
一、模块是什么
抖音: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) # 把前一个覆盖了
# 输出
测试
小明
五、相对导入
针对某个项目中的不同模块之间进行导入,称为相对导入。
只有一种格式:
相对路径:包含点号的一个相对路径。
一个点 . 表示当前路径。
两个点 . 表示的是父路径。
三个点 . 表示的是父路径的父路径
在同一个文件夹下的不同文件夹中的模块相互导入
'''
此模块名为yy.py
此模块的父目录为y文件,也就是此模块的当前目录
y文件的父目录为xy文件,也就是y文件的当前目录
xy文件下有y文件和x文件
x文件下有xx.py模块
需要从此模块导入x文件下的xx.py模块
'''
from ..x.xx import * # 导入当前模块目录的父目录下的x文件下的xx.py模块的所有成员
六、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)}')
本文来自博客园,作者:Mr-Yang`,转载请注明原文链接:https://www.cnblogs.com/XiaoYang-sir/p/14688294.html