首页 > 其他分享 >模块与包

模块与包

时间:2024-04-18 12:33:26浏览次数:47  
标签:python init json 导入 模块 import

模块定义
  • 一个py 文件就是一个模块
  • 三层架构: 总(分析功能,分配功能)-->分(给每个文件分配任务)-->总(将所有功能综合起来)
  • 可以增加程序的健壮性和可读性,
  • 增加开发效率
模块的来源
  • python解释器内置的模块(直接import调用)
  • 自己写的文件
  • 别人写好的成熟模块(先用 pip install,再import)
模块的存在形式
  • 单模块
    • 自己定义的功能所在的py文件
    • 将多个Py文件放到一个文件夹下
    • 必须有__init__.py文件
import语句发生的内部原理
  • 前提是有一个py文件,并且有自己的名称空间
  • 通过import导入模块,将所有源代码执行一变
  • 如果没有调用函数,则不会调用,而是检索到所有函数地址
  • 自动创建一个当前文件的名称空间,与自己的名称空间合并
  • 我们通过模块名.属性名来调用模块中的对象
多模块导入
  • 单独导入
    • import a,b,c,d,...
  • 单独导入
    • import a
    • import b
    • import c
详细导入语法
  • 只想要具体的指定的参数或者方法
    • from a import b
    • 这样导入可以不用模块.b了
    • 直接b领用
  • 导入模块中的所用方法
    • from a import *
对导入的模块/模块中的对象重命名
  • import a as b #把a模块改名为b,调用时如下:
  • b.方法
  • 在模块与原文件对象重复时

循环导入问题

定义:
  • a调用b,b调用a
解决方法
  • 直接将导入模块的语法放到最后
    • 会导致没得用
  • 放到指定的函数内部,只要函数不调用就不会触发导入语句
搜索模块的优先级
  • 查找模块时的查找顺序

    • 模块分类
      • 纯python编写的模块
      • 内置的一系列模块,包括Python解释器自带的和已经用pip install的
      • 使用C语言编写的底层代码
      • C和C++扩展的模块
    • 加载从下往上
    • 查找从上往下
  • 查找顺序

    • 相对路径

      • 不给路径就默认在当前目录
      • ./当前目录
      • ../上层目录
    • 绝对路径

      • sys.path
        

包的定义

  • 模块的集合文件夹,必须包含init方法
包的创建
  • pycharm右键python package,会自动生成init文件
包的使用
  • 直接导入

    • from 包 import 模块
      使用:
      模块.方法()
      
  • 先在init中注册:init就相当于包的目录

  • init注册:
    from .模块 import 方法
    
    使用:
    from 包 import 方法
    方法()
    
    原因:导入包时,多了一步操作就是先在init里匹配方法,找不到然后再挨个模块查找
    
    
    

json模块

json用途:
  • 序列化
    • 将python中的字典、列表等类型转换为字符串
    • 类型强转也可以实现,但是不能转回(不可逆)
  • 反序列化
    • 将python中的字符串转换wield字典、列表等类型
导入
  • import json:
    with open('file.json','w',encoding='utf8') as p:
    	json.dump(user_dict,fp)
    	
    写入内容单引号会自动转换为双引号,然后保存。
    可以实现将字典以字符串格式写入文件,读取时还是字典
    
json文件转为python对象
import json:
with open('file.json','w',encoding='utf8') as p:
	json.load(fp)
	
读取时还是字典
转换:反序列化
  • data_json_str =json.dumps(obj) #把字典转为了字符串
  • data_dict = json.loads(obj) #把字符串转为了字典
json保存数据时的特点
  • 中文内容会自动保存为二进制
  • 解决方法:ensure_ascii = False 就可以在写入时不被写成asscii码

标签:python,init,json,导入,模块,import
From: https://www.cnblogs.com/zenopan101861/p/18143289

相关文章

  • RTL8731/RTL8733系列双频WiFi模块方案选型参考
    RTL8731有SDIO接口的RTL8731BS-VQ-CG和USB接口的RTL8731BU-CG及RTL8731BU-VQ-CG方案;这是单通道通信,符合IEEE802.11a/b/g/n标准双频WiFi方案;其中RTL8731BU-CG可以支持到HT40,RTL8731BU-VQ-CG和RTL8731BS-VQ-CG只支持到HT20;可以理解成这是支持IEEE802.11a/b/g/n/ac标准RTL881......
  • Python中operator 模块的用法
    operator模块提供了一套与Python的内置运算符对应的高效率函数。1.函数的种类函数包含的种类有:对象的比较运算、逻辑运算、数学运算和序列运算2.比较运算运算函数语法小于lt(a,b)a<b小于等于le(a,b)a<=b大于gt(a,b)a>b大于等于ge(a,b)......
  • 工程化、模块化、组件化 开发工作中这三项有什么区别
    工程化:定义:工程化是一种遵循一定标准和规范,通过工具提高效率、降低成本的开发手段。它涉及整个开发流程的规划和管理,确保项目能够按照预定的目标和质量要求完成。关注点:工程化关注于整体的开发流程、项目结构、工具链的整合以及团队协作等方面。它强调使用工具和自动化手段来优......
  • Python中pathlib 模块的用法
    pathlib模块提供了表示文件系统路径的类,可适用于不同的操作系统。使用pathlib模块,相比于os模块可以写出更简洁,易读的代码。pathlib模块中的Path类继承自PurePath,对PurePath中的部分方法进行了重载,相比于os.path有更高的抽象级别。本文将带你学习如何使用pathlib......
  • Python中itertools 模块的用法
    在Python中,迭代器是一种非常好用的数据结构,其最大的优势就是延迟生成,按需使用,从而大大提高程序的运行效率。而itertools作为Python的内置模块,就为我们提供了一套非常有用的用于操作可迭代对象的函数。常用功能1.count功能详解count(start=0,step=1)函数有两个参数,其中......
  • [Python]OS模块应用
    OS提供许多和操作系统交互的功能,允许访问文件,目录,进程,环境变量等。导入模块,importos获取当前工作目录,os.getcwd()current_dir=os.getcwd()print("当前工作目录:",current_dir)>>>当前工作目录:C:\Users\wuyucun创建目录,os.mkdir()current_dir=os.getcwd()......
  • springboot多模块项目启动经历
    springboot多模块使用@目录springboot多模块使用前言大佬把项目权限给我了,我就先下下来看看学习一下一、识别二、maven配置1.安装maven三、加载刷新总结前言大佬把项目权限给我了,我就先下下来看看学习一下一、识别项目分为母模块和多个子模块,开始idea只是识别了最外层的pom......
  • java基础模块一
    1java基础(来自B站尚硅谷)1.1字符编码问题1,编码:保存数据的过程2.解码:读数据的过程3.注意:a.编码解码遵守的编码规范必须一致b.常见的两个编码规范: GBK:专门为仲文设计的编码ANSI代表的是GBK一个中文汉字在GBK中占2个字节 UTF-8:一个中文......
  • Java SE模块 面试知识整理
    基础概念与常识Java语言特点:面向对象(封装、继承、多态)平台无关性(Java虚拟机实现平台无关性,不同版本的操作系统中安装有不同版本的Java虚拟机,Java程序的运行只依赖于Java虚拟机)WriteOnce,RunAnywhere(一次编写,随处运行)支持多线程可靠性(具备异常处理和自动内存管理机制)安全......
  • day10_02_我的Java学习笔记 (JavaSE加强课程介绍、先建空工程--再建模块--然后建包--
    JavaSE基础加强课程介绍1.JavaSE加强课程简介2.IDEA开发模式统一工程,相当于一个小区的院子;模块,是小区的哪一栋;包,是这栋楼的那一单元类,是这个单元的哪一层楼;对象,是这层楼具体的某一户房间。eg:溪山美地二区--工程9栋--模块4单元--包8楼--......