#模块与包
Python概念
1、模块:module,其实一个python file文件,以.py结尾的文件 就是模块。
- 包含Python语句,函数 ,方法 类等
- 模块Python文件的高级叫法。
2、包 :package,代码包,包含多个py文件 【包包含多模块】,创建python package默认加一个init.py - 用来代码模块归类管理 == 框架的代码分层里用上。
- 里面的模块【py文件】可以直接进行导入 给别的模块使用。 --import
- 和普通文件夹区别: 包会有init.py , 包可以可以导入的。
- 包含了Python文件目录的高级叫法;
3、库:综合概念,由很多的包和模块组成。分为两种: - 标准库: Python的自带的一个库,不需要额外的安装,所以直接导入只用。【pathlib】
- 外部库【第三方库】:别人写好的 我们自己可以使用。这种不是Python自带的,需要自己先安装。【requests】
给模块和包取名字,参考变量的命名方式。
- 只有符合命名规则的模块和包 才可以被识别和导入成功。否则会失败。
模块和包的导入: 导入模块只在当前的py文件生效的。
1、不同的模块相互之间调用函数 和变量,需要进行导入操作。
– import 模块 包名字 : 导入模块,使用模块里的函数或者变量,需要加上模块的前缀。【模块.函数】
– from 模块 import 函数,变量:部分导入,调用函数和变量时候,不需要加模块的前缀了。多个函数变量用逗号隔开 ==更多 推荐
导入模块之后,运行,发现fun1运行了两次 有两个结果?— ??
原因:导入之后,运行代码,也会同时把原文件里的代码也会同时执行一次。
- 这种现象不是我们需要的,
-不希望被导入之后在其他模块允许,加到main里运行。 - 效果: 在main里面的代码只会在当前的py文件里运行,导入到其他模块里就不会运行。
导包目录:
- 导入包从项目的根目录【rootdir】下面的第一个文件夹开始导入。可以一级一级的取目录。
- 目前项目结构里: python65根目录
- 根目录下的第一个文件夹 -day07
- 也可以手动设置跟目录-- 在后面框架搭建会用。 --右键 set rootdir
– 注意: 不可以有多个跟目录。 只能设置一个。
# 1、import 模块:包名字: 导入模块,使用模块里的函数或者变量,需要加上模块的前缀。【模块.函数】
# # import d5_module1
# d5_module1.fun1()
# print(d5_module1.name)
# 2、 from 模块 import 函数,变量:调用函数和变量时候,不需要加模块的前缀了。
# from day07_文件处理和模块包.d5_module1 import fun1,name
#
# fun1()
# print(name)
# 3、导入不是同级目录下模块 --datas下面 module3
# from day07_文件处理和模块包.datas.d7_module3 import fun3 # 规范的导包目录
# from datas.d7_module3 import fun3 # 手动设置了根目录之后可简化 导包
# fun3()
# 4、标准库 -- 部分导入
# from pathlib import Path
def fun1():
print("这是一个module1里的函数fun1")
name = "手放开"
# 这种调试代码 检查代码效果和正确性。-- 不希望被导入之后在其他模块允许,加到main里运行。
if __name__ == '__main__':
fun1()
print(name)
第三方导入
非自己写的模块导入
-
标准库 [built-in] : pathlib , time,random
import pathlib
from pathlib import Path -
第三方库: 外部库【第三方库】:别人写好的 我们自己可以使用。这种不是Python自带的,需要自己先安装
- python有非常丰富第三方使用。–站在巨人肩膀上编程。
- requests,pytest
- 安装: pip install requests | pip show requests 查看库,也可以pycharm安装
– 遇到问题: 切换源 + 用户权限–user- D:\Python39\Lib\site-packages
- 导入: import ,from xx import
- 安装: pip install requests | pip show requests 查看库,也可以pycharm安装
# pathlib
import pathlib
from pathlib import Path
# time
# import time
# print(time.time())
#
# from time import time
# print(time())
#
# # random
# import random
# print(random.random())
# requests:
import requests
res = requests.get("https://www.baidu.com")
print(res.text)
别名
场景1 : 导入包的名字跟我自己名字重复的:
我的模块里有自己的函数 导入的模块里也有同名的函数,优先使用我自己的函数。
- 如果使用导入的函数呢?
- 方法1: 改函数的名字 = 不可取,可能被其他的模块调用了 改名字很麻烦
- 方法2: 导入后取别名 as 别名,就可以使用这个别名进行调用。 原来名字在当前模块里不能用了。
场景2: 导入的包或者模块名字太长了 取短一点的名字 方便后续调用。
# 我的模块里有自己的函数 导入的模块里也有同名的函数
from d5_module1 import fun1 as mo1_fun1
def fun1():
print("这是module2里的函数fun1")
fun1()
mo1_fun1()