【一】模块与包

(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. CVE-2025-29927 Next.js 中间件权限绕过漏洞复现

    漏洞信息 Next.js 是一个基于 React 的流行 Web 应用框架,提供服务器端渲染.静态网站生成和集成路由系统等功能.包含众多功能,是深入研究复杂研究的完美游乐场.在信念.好奇心和韧性的推动 ...

  2. API开放平台网关需要做什么?

    首发于公众号:BiggerBoy 欢迎关注,查看更多技术文章 怎么搭建API开放平台网关? API的全称是应用编程接口(Application Programming Interface),这并不是一 ...

  3. Netty源码—9.性能优化和设计模式

    大纲 1.Netty的两大性能优化工具 2.FastThreadLocal的实现之构造方法 3.FastThreadLocal的实现之get()方法 4.FastThreadLocal的实现之set( ...

  4. 【Java】修饰符

    修饰符(Modifier):是用于限定类型以及类型成员的声明的一种符号. 其用来定义类.方法或者变量,通常放在语句的最前端. 例子: public class Person { default Str ...

  5. 【Java】Java提取${}占位符并组装对应值

    目录 Java提取${}占位符并组装对应值 零.起因 壹.想法 贰.实现 叁.总结 肆.参考文档 Java提取${}占位符并组装对应值 实现了一个${}装配工~ 零.起因 最近写个JavaWeb项目, ...

  6. WebKit Inside: 渲染树

    经过CSS的匹配,就要进入渲染树的构建. 渲染树也叫RenderObject树,因为渲染树上每一个节点,都是RenderObject的子类. 首先来看一下RenderObject的继承类图. 1 Re ...

  7. Eclipse java项目转Maven项目

    1.右键项目->configure->选择maven->配置maven的pom.xml 2.在src/main下新建java文件,将原来src下的java文件夹拷贝至该目录下: 3. ...

  8. CentOS linux 安装openssl(openssl拒绝服务漏洞【CVE-2022-0778】解决)

    一.安装 1.下载相关openssl包 下载地址: https://www.openssl.org/source/ 2.将下载好的压缩包放到 /app/server/nginx 路径下(根据自己实际需 ...

  9. 【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)

    官方教程非常长,我看了很认可,但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求.所以有了这篇文章.[写给自己看的,里面半句废话的解释都没有,如果看不懂的话直接看官方教程再看我的] 我是 ...

  10. AxureRP大型综合商场APP高保真交互原型图含VR试衣间停车缴费会员卡楼层导购

    大型综合商场APP AxureRP高保真交互原型图含VR试衣间停车缴费会员卡楼层导购,是一款完全原创的,关于大型综合商场的综合类应用APP,app中包含在线VR试衣间.楼层导购.会员码支付.在线停车缴 ...