首页 > 其他分享 >13.模块 包

13.模块 包

时间:2024-04-23 12:34:04浏览次数:12  
标签:13 name py json 模块 print import

【一】模块介绍

1)概念

  • 在Python中,一个py文件就是一个模块
  • 文件名xxx.py,其中xxx就是模块名

2)优点

  • 极大的提高了开发速率
  • 增加程序的健壮性和可读性

3)来源

  • 内置的:python解释器自带的,可直接用
  • 第三方:别人写的,需要下载在使用
  • 自定义:自己写的

4)存在形式

1.单模块

自定义的功能所在py文件

2.包

一系列py文件的集合
必须有__init__.py 文件

【二】模块使用

新建文件 module.py

name = 'a'
# 打印
def name_():
    print(name)
# 修改
def name_new():
    global name
    name = 'b'
    print(name)
# 内嵌函数
def outer():
    def inner():
        print('***')
    return inner

1)直接导入

import 文件名/模块名
import module
# 打印当前模块位置
print(module)  
# <module 'module' from 'E:\\Python\\0\\pythonProject\\ST-day\\day18\\module.py'>
#打印
print(module.name)  # a
# 调用函数修改的模块修改全局name
module.name_new()  # b
print(module.name)  # b
# 调用内嵌函数
func = module.outer()
func()  # ***

2)导入多个模块

# 方法一
import module1
import module2
    ...
import moduleN
# 方法二
import module1,module2,...,moduleN

3)详细导入

1.导入指定内容

from 模块名 import 属性名
from 文件夹 import 模块名
from 文件夹.模块名 import 属性名
# 只使用module中的name_()
from module import name_
name_()	#a

2.导入所有

  • 把模块中所有的名字都导入到当前执行文件的名称空间中
  • 在当前位置可直接可以使用这些名字
from 模块名 import *
  • 只能在模块最顶层使用,在函数内非法

4)模块重命名

from 模块名 as 自定义名字
from 模块名 import 属性名 as 自定义名字

5)循环导入问题

  • 两个文件相互调用

1.案例

  • m1.py
print('正在导入m1')
from m2 import y
x='m1'
  • m2.py
print('正在导入m2')
from m1 import x
y='m2'
  • run.py
import m1

2.解决方法一

导入语句放到最后,保证在导入时,所有名字都已经加载过

  • m1.py
print('正在导入m1')
x='m1'
from m2 import y
  • m2.py
print('正在导入m2')
y='m2'
from m1 import x
  • run.py
import m1
print(m1.x)
print(m1.y)

3.解决方法二

导入语句放到函数中,只有在调用函数时才会执行其内部代码

  • m1.py
print('正在导入m1')
def f1():
    from m2 import y
    print(x,y)
x = 'm1'
  • m2.py
print('正在导入m2')
def f2():
    from m1 import x
    print(x,y)
y = 'm2'
  • run.py
import m1
m1.f1()

【三】模块加载和搜索顺序

1)模块分类

  • 使用纯Python代码编写的py文件
  • 包含一系列模块的包
  • 使用C编写的底层代码
  • 使用C或C++编译的扩展模块

2)加载顺序

  • 先c 和 c++ 扩展出去的模块
  • 使用c语言编写的底层代码
  • 内置的一系列模块 (python解释器自带的和你安装 pip install )
  • 纯python编写的自己定义的模块

3)查找顺序

# 先从自己的局部查
def func():
    import time
# 再从全局查
import time 
# 去内建查
python解释器自带的模块和你安装的模块中查,查出对应的模块再使用
# 去底层 c 语言查
有些功能你点进去看源码发现只要一个 pass
使用c语言写的,但是不想让你看到所有就省略掉了

【四】路径

1)相对路径

相对于当前目录或脚本文件所在目录的路径

  • 默认就是当前目录下

  • ./ 表示当前同级目录下

  • ../ 表示当前目录的上一级目录

2)绝地路径

文件或目录在文件系统中的完整路径

# 在python内部查找的顺序都是绝对路径
import sys
print(sys.path)
# [
# 'E:\\Python\\0\\pythonProject\\ST-day\\day18',
# 'E:\\Python\\0\\pythonProject',
# 'E:\\Python\\PyCharm 2023.3.4\\plugins\\python\\helpers\\pycharm_display',
# 这里放的就是c语言源码编译后的扩展包
# 'E:\\Python\\Py3.11\\python311.zip', 'E:\\Python\\Py3.11\\DLLs',
# 放的是内置的模块或者安装的模块
# 'E:\\Python\\Py3.11\\Lib',
# 安装python解释器的路径
# 'E:\\Python\\Py3.11',
# 这里面也有部分安装的的包 ,默认安装到 site-packages
# 'E:\\Python\\Py3.11\\Lib\\site-packages',
# # 回到pycharm
# 'E:\\Python\\PyCharm 2023.3.4\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

【五】包

1)介绍

  • 是一个模块的集合,可将多个模块功能组合到一起

  • 包是一个包含模块的目录,同时还可以包含其他子包

2)创建包

# 【1】创建一个文件夹
# 在文件夹内部创建 一个 __init__.py 文件
# 这个文件夹就叫包

# 【2】在pycharm右键文件新建 package
# 自动创建 __init__.py 文件

3)使用包

1.直接使用

image-20240418160408905

2.制作包

image-20240418160733074

【六】常用模块

1)json模块

1.导入模块

import json

2.序列化方法(loads)

  • 字符串(str)—> 字典(dict)
import json

user = '{"name": "diva", "age": 18}'
user_json = json.loads(user)
print(user_json, type(user_json))
# {'name': 'diva', 'age': 18} <class 'dict'>

3.反序列化(dumps)

  • 字典(dict)—> 字符串(str)
import json

user = {'name': 'diva', 'age': 18}
user_json = json.dumps(user)
print(user_json, type(user_json))
# {"name": "diva", "age": 18} <class 'str'>

4.保存与读取

保存进去是字典格式的字符串 读取出来是字典

import json
user =  {'name': 'diva', 'age': 18}
# 写入
with open('data.json','w',encoding="utf-8") as fp:
    json.dump(user,fp)
# 读取
with open('data.json','r',encoding="utf-8") as fp:
    data = json.load(fp)

5.参数

# 保存中文数据(ensure_ascii=False)
import json
user =  {'name': '晓雾', 'age': 18}
with open('data.json','w',encoding="utf-8") as fp:
    json.dump(user,fp,,ensure_ascii=False)

标签:13,name,py,json,模块,print,import
From: https://www.cnblogs.com/Mist-/p/18152614

相关文章

  • 14.常用模块(一)
    【一】time模块时间戳元组(struct_time)格式化的时间字符串importtime1)时间转换1.生成时间戳importtimetime_str=time.time()print(time_str,type(time_str))#1713506730.3318834<class'float'>2.时间戳转换成时间元组importtime#国际时间time_tuple......
  • stm32串口晶振不对输出乱码+汇承HC-14lora模块
    最近要用到一个lora无线透传模块,然后就先用两个32开发板(用的STM32F103C8T6)试试简单的收发数据。结果,第一步串口发送一句话就寄了,我串口打印了“hi”,结果出现了一堆乱码,我寻思着,就这一句代码也不至于还能错吧。。。然后我以为是USB-TTL的问题,换了一个能用的还是一样。。。但是很奇......
  • git 子模块使用方法
    git子模块使用方法目录git子模块使用方法什么情况下使用子模块添加新的子模块克隆含有子模块的仓库主仓库更新子模块拉取更新了子模块的主仓库在子模块上工作参考来源什么情况下使用子模块如果想要在开发的项目中引入另外一个项目。那么除了直接将项目文件复制到主仓库目录下......
  • Virtuoso绘制模拟模块Frame并导出LEF
    数模混合Flow时一些pin多的模拟模块可以通过导出lib和LEF,合并到数字flow中进行自动布线。第一步肯定是和后端那边确定macro的形状以及各个端口的出pin方向和metallayer。这些确认完了之后,就可以开始做lef了。网络上的教程交的是用abstract做,但实际上这是个很老旧的软件了,现在vi......
  • 2024年4月22日最新版用13.2.0版的mingw64编译3.2.4版的wxwidgets
    相关文件下载链接:13.2.0版的MinGW643.2.4版的wxwidgets相关环境变量设置:右键单击“我的电脑”->属性->高级系统设置->环境变量->系统变量->Path->编辑->新建,输入解压后的mingw64中的bin路径。例如:D:\devolopment\mingw64\bin\测试成功安装与否,在上述环境变更设置好后......
  • 只要2599元!Intel笔记本旗舰i9-13980HX搬上桌面:史上最强mATX小板
    这两年出现了不少集成Intel、AMD笔记本移动处理器的桌面主板,深圳尔英(Erying)更是首次将Intel13代酷睿HX系列放在了mATX小主板之上,标准的244x244毫米尺寸。新板子隶属于PoleStar极星系列,别看面积不大,配置却相当彪悍,比如10相供电电路和一体式散热装甲、四个4针风扇插针,可控制......
  • CF1137F Matches Are Not a Child's Play 题解
    题目链接点击打开链接题目解法参考abruce的非\(lct\)的做法\(compare\)操作是搞笑的,可以转化成求\(u,v\)的\(when\)操作一个结论是编号最大的点一定是最晚删的,不妨令编号最大的点为根,则删除顺序一定是从下往上删的先考虑原树上单个点\(u\)的\(when\)怎么求令......
  • CTFshow-Web入门模块-命令执行
    CTFshow-Web入门模块-命令执行by故人叹、web29考察点:php命令执行、正则匹配绕过题目源码:error_reporting(0);if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/flag/i",$c)){eval($c);}}else{highlight_file(__FILE__);......
  • JTCR-模块-14
    JDK9引入了模块,用于描述代码之间的关系和依赖,控制某模块是否可以被其他模块访问。模块基础一个模块由一组包和资源组成。模块定义在名为module-info.java的文件中,javac将这个文件编译成类文件,称为moduledescriptor。该文件仅能包含一个模块定义。模块定义的一般形式为://......
  • JTCR-lambda 表达式-13
    介绍lambda表达式本质上是一个匿名方法,用于实现函数式接口(functionalinterface)定义的方法。这就产生了匿名类。lambda也称为闭包(closures)。函数式接口是仅有一个抽象方法的接口。如Runnable接口仅有run()方法,该方法表明了接口的目的。函数式接口定义了lambda表达式的目......