【一】模块与包

(1)什么是模块

  • 在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。

(2)模块的来源

  • 内置的:python解释器自带的,直接拿来使用的
  • 第三方的:别人写的,如果想用,就要先下载在使用
  • 自定义的:我们自己写的

(3)模块的存在形式

  • 我们自己写的py文件(一个py文件就是一个模块)
  • 包:一系列py文件的集合(文件夹)

一个包里面会有一个__init__.py文件

(4)模块的使用

(1)直接导入

  • import 语句
import py文件名/模块名

(2)import导入多个模块方式

  • 用import语句导入多个模块

    • 可以写多行import语句
    import module1
    import module2
    ...
    import moduleN
  • 还可以在一行导入,用逗号分隔开不同的模块

    import module1,module2,...,moduleN

但其实第一种形式更为规范,可读性更强,推荐使用

而且我们导入的模块中可能包含有python内置的模块、第三方的模块、自定义的模块

为了便于明显地区分它们,我们通常在文件的开头导入模块

并且分类导入

一类模块的导入与另外一类的导入用空行隔开

(5)详细导入

  • from ... import ... 语句
from 模块位置 import 模块名

(6)模块重命名

  • from ... import ... as ... 语句
from 模块位置 import 模块名 as 自定义名字
  • 我们还可以在当前位置为导入的模块起一个别名
#为导入的模块foo在当前位置起别名f,以后再使用时就用这个别名f
import foo as f
f.x
f.get()
  • 通常在被导入的名字过长时采用起别名的方式来精简代码

    • 另外为被导入的名字起别名可以很好地避免与当前名字发生冲突
  • 还有很重要的一点就是:
    • 可以保持调用方式的一致性
  • 例如
    • 我们有两个模块json和pickle同时实现了load方法

      • 作用是从一个打开的文件中解析出结构化的数据
    • 但解析的格式不同
      • 可以用下述代码有选择性地加载不同的模块
if data_format == 'json':
# 如果数据格式是json,那么导入json模块并命名为serialize
import json as serialize
elif data_format == 'pickle':
# 如果数据格式是pickle,那么导入pickle模块并命名为serialize
import pickle as serialize # 最终调用的方式是一致的
data=serialize.load(fn)

【二】包

(1)什么是包

  • 包是一个模块的集合,它可以将多个模块的功能组合到一起。
  • 包可以按照其功能和作用进行分类,方便用户查找和使用。
  • 包是在Python标准库中定义的一种特殊类型的模块,可以通过import语句来引入和使用。
  • Python的包分为标准库包和第三方库包。
    • 标准库包是Python内置的包,包含了一些基本的模块和函数,如os、sys、random等;
    • 第三方库包是第三方开发的包,通常提供了更加丰富和高级的功能。

(2)包结构

  • 包是Python程序中用于组织模块的一种方式。包是一个包含模块的目录,同时还可以包含其他子包。
  • 要创建一个包,我们只需要在目录中创建一个名为__init__.py的文件即可。
|-pakageName
|-__init__.py
|-moduleName1.py
|-moduleName2.py
|-...
  • 包路径下必须存在 __init__.py 文件。

(3)创建包

  • 我们创建一个 cal 的包,包中有一个计算器的 model ,结构如下:
|-cal
|-__init__.py
|-calculator.py
  • calculator.py
def add(a, b):
return a + b def reduce(a, b):
return a - b def multiply(a, b):
return a * b def divide(a, b):
return a / b

(4)直接使用包

  • Python 包的使用和模块的使用类似,下面是导入的语法:
import 包名.包名.模块名

(1)演示

  • 比如我们在 use_cal.py 中导入 calculator.py
# 导入包
import cal.calculator
# 使用包的模块的方法
print(cal.calculator.add(1,2))

(2)详细使用包

from 包名.模块名 import 模块中的方法

(5)制作包

(1)注册包

  • 在cal包下的__init__.py中注册相关变量
from .calculator import add, reduce

(2)使用包

from cal import add, reduce

【三】循环导入问题

  • 循环导入问题指的是在一个模块加载/导入的过程中导入另外一个模块

    • 而在另外一个模块中又返回来导入第一个模块中的名字
  • 由于第一个模块尚未加载完毕
    • 所以引用失败、抛出异常
  • 究其根源就是在python中
    • 同一个模块只会在第一次导入时执行其内部代码
    • 再次导入该模块时
    • 即便是该模块尚未完全加载完毕也不会去重复执行内部代码
  • 解决方式:导入语句放到最后,保证在导入时,所有名字都已经加载过

【四】相对路径和绝对路径

(1)绝对路径

  • 从最根本的盘符开始找起来的文件路径
D:\2023propygo\day\day15\ATM1.py

(2)相对路径

  • 是相较于当前文件存在的文件夹开始找起来的
r'无参装饰器练习.py'

模块与包&相对绝对路径的更多相关文章

  1. Python—导入自定义的模块和包(指定路径下的模块和包)

    模块路径如下图: import sys sys.path.append(r"E:\project\path") print "===>", sys.arg ...

  2. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  3. python 深入模块和包

    模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...

  4. Python中的模块与包

    标准库的安装路径 在import模块的时候,python是通过系统路径找到这些模块的,我们可以将这些路径打印出来: >>> pprint.pprint(sys.path) ['', ...

  5. Python类、模块、包的区别

    类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...

  6. node.js 模块和包

    Node.js 的模块和包机制的实现参照了 CommonJS 的标准,但并未完全遵循.不过两者的区别并不大,一般来说你大可不必担心,只有当你试图制作一个除了支持 Node.js之外还要支持其他平台的模 ...

  7. python模块与包加载机制

    模块的搜索路径: When a module named spam is imported, the interpreter searches for a file named spam.py in ...

  8. Python 2.7 学习笔记 模块和包

    我们来考虑下如下几种场景: 1.编写一个python程序,如果程序比较简单,则可以把代码放到一个python文件中.但如果程序功能比较多,可能需要多个python文件来组织源代码.而这些文件之间的代码 ...

  9. Python 基金会 —— 模块和包简介

    一.模块(Module) 1.模块的作用      在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...

  10. python进阶(3):模块和包

    之前两天我们介绍了一些比较常用的模块,而我也说过会讲解什么是模块,今天我们就来分析分析模块和包,模块我们现阶段使用还可以而包的话现阶段我们基本很少会用到包,学的不是很清楚也没关系这些东西都是用的多了也 ...

随机推荐

  1. Linux下查询tomcat进程命令

    由于查询tomcat进程时将ps -ef|grep tomcat命令记错为ps -f|grep tomcat命令,因此对比两个命令进行区分. ps -f |grep tomcat执行结果: dgztc ...

  2. Alpine

    ... 参考 Alpine包管理工具apk使用介绍 Alpine - Docker 从入门到实战

  3. 聊聊智商税:AI知识库

    提供AI咨询+AI项目陪跑服务,有需要回复1 DeepSeek一体机是一种神奇的存在,很多公司跟风购买后发现一个尴尬的事情:用不起来,于是一体机厂家或者中间商便需要在其中叠加AI场景,这里最常见的场景 ...

  4. 🎀idea import配置

    简介 本文记录idea中import相关配置:自动导入依赖.自动删除无用依赖.避免自动导入*包 自动导入依赖 在编辑代码时,当只有一个具有匹配名称的可导入声明时,会自动添加导入 File -> ...

  5. Chat to MySQL 最佳实践:MCP Server 服务调用

    一.场景说明: 通过 1Panel+MaxKB 两个开源工具结合 MCP 服务实现 Chat to Mysql. 二.资源准备 MySQL:数据库以及数据库表(培训认证中心运营数据表) 1Panel: ...

  6. MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?

    MySQL 中 DELETE.DROP 和 TRUNCATE 的区别 在 MySQL 中,DELETE.DROP 和 TRUNCATE 都是常用于删除数据的操作,但它们在功能.性能.用途和实现方式上有 ...

  7. web自动化:webdriver常用api

    一.获取操作 1.get('url'):访问指定的url webdriver.get(String url); 2.Getcurrenturl():获取当前页面url webDriver.getCur ...

  8. 【完结】【一本通提高】KMP做题记录

    题目编号 标题 估分 正确 提交 Y 2076 Problem  A [一本通提高篇KMP]剪花布条 --- 156 293 Y 2077 Problem  B [一本通提高篇KMP]Radio Tr ...

  9. php获取前一天,前一个月,前半年,前一年的时间戳

    #获取前一小时strtotime("-1 hour") #获取前一天strtotime("-1 day") #获取前一周strtotime("-1 w ...

  10. 漏洞预警 | CraftCMS模板注入漏洞

    0x00 漏洞编号 CVE-2024-56145 0x01 危险等级 高危 0x02 漏洞概述 CraftCMS是一个灵活的.易于使用的内容管理系统. 0x03 漏洞详情 CVE-2024-56145 ...