02-10.python入门基础一Python模块与包(二)
五、Python 包的概念
(一)包的定义与结构
在 Python 中,“包”(Package)是一种按照目录来组织模块的方式,它允许开发者将相关的模块集合在一起,形成一个更具逻辑性和结构性的代码单元。
从物理层面来看,包本质上就是一个文件夹,在这个文件夹里面可以包含多个模块(即 Python 文件),同时也能够包含子包(也就是子文件夹),就如同普通文件夹下面可以存放文件以及嵌套其他子文件夹一样。不过,要让 Python 解释器将这个文件夹识别为一个包,该文件夹下必须包含一个名为 __init__.py 的特殊文件。这个文件可以是空的,当然也能在其中编写包的初始化代码等内容。例如,当我们导入一个包时,实际上就是执行这个 __init__.py 文件,它可以做一些初始化的操作,像导入该包内的其他模块等,以此来完成整个包的准备工作,方便后续对包内模块的使用。
以一个简单的示例来说明包的结构,假设有一个名为 my_package 的包,其目录结构可能如下:
my_package/ __init__.py module1.py module2.py subpackage/ __init__.py module3.py |
在上述结构中,my_package 就是主包,它里面包含了两个模块文件 module1.py 和 module2.py,同时还有一个名为 subpackage 的子包,子包下同样有自己的 __init__.py 文件以及模块文件 module3.py。
并且,包是可以进行多级嵌套的,能够构建出不同复杂度的目录结构,以适应各种规模和复杂程度的项目需求。比如在大型项目中,可能会有类似下面这样更深层次的嵌套结构:
project/ main_package/ __init__.py module_a.py module_b.py subpackage_1/ __init__.py module_c.py module_d.py subsubpackage/ __init__.py module_e.py another_package/ __init__.py ... |
通过这样的多级嵌套包结构,能够将功能相关的模块更加细致地分类组织在一起,让整个项目的代码架构更加清晰明了,便于开发、维护以及后续的扩展等操作。要是没有 __init__.py 文件,Python 解释器就会把相应的目录当成普通目录,而不会将其视作一个包来处理,自然也就无法按照包的方式去导入和使用其中的模块了。
(二)包的优势
使用包来组织模块在 Python 开发中有着诸多显著的优势,尤其在处理较为复杂的大型项目时,这些优势体现得更为明显。
首先,包能够有效避免模块名冲突。
其次,包有助于更好地管理和维护大量模块。再者,包提升了代码的可扩展性。
六、Python 包的组织
(一)创建包的步骤
在 Python 中创建包主要有以下详细步骤:
1. 创建目录结构
首先,需要创建一个新的文件夹作为包的根目录,这个目录的命名要遵循 Python 的命名规范,通常采用小写字母加下划线的方式,不能以数字开头,例如 my_package 。然后,根据包内模块及子包的规划,在这个根目录下创建相应的子目录(用于存放子包)以及 .py 文件(作为模块)。
例如,创建一个简单的包结构,它包含两个模块文件和一个子包,目录结构如下:
my_package/ __init__.py module1.py module2.py subpackage/ __init__.py module3.py |
这里 my_package 是主包目录,subpackage 就是它的子包目录,每个目录下都需要有 __init__.py 文件来标识其为一个 Python 包结构中的一部分。
2. 添加 __init__.py 文件
__init__.py 文件在包的创建中起着关键作用,它可以是空文件,不过也能在其中编写一些包的初始化代码等内容。当导入一个包时,Python 解释器实际上会执行这个 __init__.py 文件,我们可以利用它来做一些准备工作,比如导入该包内的其他模块,方便后续对包内模块的使用。
以下是几种常见的在 __init__.py 文件中的操作示例:
导入包内模块示例:
假设在 my_package 的 __init__.py 文件中,希望在导入这个包时自动导入 module1 和 module2 模块,可以这样写:
from. import module1 from. import module2 |
这样,当使用 import my_package 语句导入包时,就能直接访问 module1 和 module2 模块内定义的内容了。
使用 __all__ 控制导入内容示例:
如果想控制使用 from my_package import * 语句时具体导入哪些模块,可以在 __init__.py 文件中定义 __all__ 列表,比如:
__all__ = ['module1', 'module2'] |
这样,使用上述语句时就只会导入 module1 和 module2 这两个模块,而不会导入其他未在列表中指定的对象。
3. 创建模块文件
在相应的目录下创建 .py 文件作为模块,在这些模块文件中编写具体的 Python 代码,定义函数、类、变量等各种 Python 对象,就像创建普通的 Python 模块一样。
例如,在 my_package 目录下的 module1.py 文件中定义一个简单的函数:
def function_in_module1(): print("This is a function in module1.") |
在 subpackage 子包目录下的 module3.py 文件中也可以定义相关内容,比如:
class ClassInModule3: def __init__(self): self.data = "Some data in ClassInModule3" def show_data(self): print(self.data) |
4. 更复杂包结构示例(含有多级子包)
在大型项目中,常常会创建多级嵌套的包结构来更好地组织代码,例如下面这样的结构:
project/ main_package/ __init__.py module_a.py module_b.py subpackage_1/ __init__.py module_c.py module_d.py subsubpackage/ __init__.py module_e.py another_package/ __init__.py ... |
创建过程和前面类似,每个包目录(包括各级子包目录)下都需要添加 __init__.py 文件,然后在对应的模块文件中编写具体功能代码。
假设在 main_package 的 __init__.py 文件中,可以按照功能需求导入相关模块,像这样:
from. import module_a from. import module_b from.subpackage_1 import module_c |
在 subpackage_1 的 __init__.py 文件里又可以导入它内部以及下级子包中的模块等,比如:
from. import module_c from. import module_d from.subsubpackage import module_e |
通过以上步骤,就完成了 Python 包的创建过程,后续就可以在其他 Python 脚本中导入并使用这些包及包内的模块了。
(二)包内模块的导入与调用
创建好包之后,如何在 Python 脚本中导入包内的模块并进行调用呢?下面将详细介绍不同的导入方式及相关注意事项。
1. 使用 import 语句导入包及模块
导入整个包:
可以使用 import 关键字直接导入整个包,语法形式为 import package_name,例如:
import my_package |
当执行这样的语句后,Python 会在相应的搜索路径中查找名为 my_package 的包(也就是包含 __init__.py 文件的目录),并加载进来。不过要访问包内的模块成员,需要通过包名作为前缀,再加上模块名以及相应的成员名来访问,例如:
my_package.module1.function_in_module1() |
导入包内的特定模块:
如果只想导入包内的某个具体模块,可以使用 import package_name.module_name 的语法形式。比如,对于前面创建的 my_package 及其子包 subpackage,若要导入 subpackage 中的 module3 模块,可以这样写:
import my_package.subpackage.module3 |
然后就可以使用该模块内定义的类、函数等成员了,像这样:
obj = my_package.subpackage.module3.ClassInModule3() obj.show_data() |
2. 使用 from...import 语句导入特定模块成员
导入模块中的指定成员:
from...import 语句允许从模块中导入指定的成员(如函数、变量、类等),并直接在当前命名空间中使用这些成员,无需再添加模块名作为前缀,语法形式为 from package_name.module_name import member_name。
例如,要从 my_package 的 module1 模块中导入 function_in_module1 函数,可以这样写:
from my_package.module1 import function_in_module1 function_in_module1() # 直接调用函数,无需加模块名前缀 |
导入子包中模块的成员:
对于子包中的模块成员导入,同样使用 from...import 语句,只是需要带上相应的包和子包路径,例如,从 my_package 的子包 subpackage 里的 module3 模块中导入 ClassInModule3 类:
from my_package.subpackage.module3 import ClassInModule3 obj = ClassInModule3() obj.show_data() |
3. 相对名称导入
在包内的模块之间,还可以使用相对名称导入的方式。相对导入使用点号来表示层级关系,单个点号(.)表示当前目录,两个点号(..)表示上一级目录。
例如,在 my_package 的 subpackage 子包下的 module3.py 文件中,如果要导入同目录下的其他模块或者上级目录中的模块,可以这样做:
导入同目录模块:
from. import module4 # 假设存在module4.py这个同目录下的模块 |
导入上级目录模块:
from.. import module1 # 导入my_package目录下的module1模块 |
需要注意的是,相对导入只能在包内的模块间使用,不能用于顶级模块(例如直接运行的脚本)。而且要避免循环导入的问题,即两个或多个模块之间相互导入,这可能会导致代码出现逻辑错误或者运行时错误,需要仔细设计模块间的依赖关系来避免这种情况发生。
总之,掌握好包内模块的导入与调用方式,能够更加灵活、高效地在 Python 项目中组织和使用代码,充分发挥包结构带来的代码管理优势。
七、Python 包的管理方法
(一)pip 工具
pip 是 Python 自带的一款功能强大的包管理工具,它主要用于从 Python 包索引(PyPI)中安装、升级以及卸载 Python 包,为开发者管理项目依赖提供了便捷的途径。
在安装 Python 环境时,pip 通常会一并被安装好,无需额外操作即可直接使用。以下是一些 pip 工具的常见使用场景及对应命令示例:
安装 Python 包:
使用 pip install 命令可以轻松安装指定的 Python 包,例如想要安装 numpy 包,只需在命令行中输入 pip install numpy,pip 就会自动从 PyPI 上下载该包并安装到当前的 Python 环境中。如果需要安装指定版本的包,可以使用类似 pip install numpy==1.21.0 的命令,这样就能精准安装到版本号为 1.21.0 的 numpy 包了。
查看已安装的包:
通过 pip list 命令,可以列出当前 Python 环境中已经安装的所有 Python 包及其对应的版本信息,方便开发者了解项目所依赖的包的情况,以及确认某个包是否已经成功安装。
升级包:
当某个 Python 包有了更新版本,想要将其升级到最新版时,可以使用 pip install --upgrade 命令,比如 pip install --upgrade requests 就能把 requests 包升级到最新可用的版本,确保使用的包具备最新的功能和修复了已知的问题。
卸载包:
若不再需要某个已安装的 Python 包,利用 pip uninstall 命令可将其卸载,像 pip uninstall beautifulsoup4 就能把 beautifulsoup4 包从当前 Python 环境中移除,节省空间并避免不必要的依赖冲突。
(二)其他包管理工具
1. Conda
Conda 是一个跨平台的包管理和环境管理系统,它具有很强的通用性,不仅可以管理 Python 包,还能够对其他编程语言的包以及虚拟环境进行有效管理。
对于数据科学、机器学习等复杂项目而言,往往需要使用多种不同编程语言编写的库,并且不同项目可能对同一个库有着不同版本的需求,这时候 Conda 就能发挥出很大的优势。
相关文章:
02-10.python入门基础一Python模块与包(二)
五、Python 包的概念 (一)包的定义与结构 在 Python 中,“包”(Package)是一种按照目录来组织模块的方式,它允许开发者将相关的模块集合在一起,形成一个更具逻辑性和结构性的代码单元。 从物…...
[WiFi] WiFi 802.1x介绍及EAP认证流程整理
802.1X Wi-Fi 802.1X 是一种网络访问控制协议,常用于保护无线网络。它提供了一种基于端口的网络访问控制机制,主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点: 认证框架 802.1X 使用 EAP(可扩展认证协议…...
前端通过new Blob下载文档流(下载zip或excel)
当后端返回这样的预览: 前端该如何下载呢?首先在axios请求里,加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回,…...
R 常用的内置软件包及功能介绍
R 中有许多内置包,提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介: 1. stats 包 stats 是 R 的一个核心包,几乎每个 R 用户都会使用它。它包含了许多统计分析的函数,…...
基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)
超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压:5V ②超小静态工作电流:小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大): R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…...
12月第十九讲:Redis应用Redis相关解决方案
1.数据库与缓存一致性方案 2.热key探测系统处理热key问题 3.缓存大value监控和切分处理方案 4.Redis内存不足强制回收监控告警方案 5.Redis集群缓存雪崩自动探测 限流降级方案 6.缓存击穿的解决方法 线上Redis比较严重的问题排序是:数据库和缓存一致性、热key…...
solon 集成 activemq-client (sdk)
原始状态的 activemq-client sdk 集成非常方便,也更适合定制。就是有些同学,可能对原始接口会比较陌生,会希望有个具体的示例。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client&l…...
STM32-笔记7-继电器定时开闭
1、复制02项目,重命名08-继电器定时开闭 打开项目工程 在\Drivers\BSP\该路径下,新建alarm文件夹,该文件夹下里面包含alarm.c和alarm.h文件 加载进该项目中 为什么这里使用的是 这个单词,而不是继电器(relay&#…...
B4X编程语言:B4X的映射(数据地图Map)详解
B4X的映射(Map)是由多个键值对组成的数据集合,也称为数据地图。它和列表一样也是一个非可视化的数据容器,在B4X中作为变量使用,用于在单个变量下存储多个键值对。 映射中的键是唯一的。 这意味着,如果您添加了一个键/值对…...
windows C++ 判断文件大小,清空文件,写日志
windows C 判断文件大小,清空文件,写日志等几个常见的接口,记录一下备忘 #include <iostream> #include <vector> #include<Windows.h> #include<string> #include <iostream> #include <sys/types.h> …...
用Python设置Excel工作表的页眉和页脚
在处理和分析数据时,Excel作为一款功能强大的工具,被广泛应用于各个领域。当涉及到打印或分享工作表时,为文档添加专业的页眉和页脚不仅能提升文件的视觉效果,还能提供必要的信息,例如公司标识、日期、文件名或是页码等…...
electron-vite【实战】自定义标题栏【组件封装】(含异形标题栏,指定区域拖拽,窗口置顶,窗口最小化,窗口最大化,取消最大化,隐藏窗口到托盘等)
效果预览 技术要点 透明背景 src/main/index.ts 的 new BrowserWindow 中添加 transparent: true, // 设置窗口背景透明frame: false, // 隐藏窗口边框仅图标和标题部分可拖拽 仅图标和标题部分添加样式 drag .drag {-webkit-app-region: drag; }图标与标题栏的融合 标题栏的…...
MySQL复制问题和解决
目录 环境介绍 一,主库执行delete,从库没有该数据 模拟故障 修复故障 二,主库执行insert,从库已存在该数据 模拟故障 故障恢复 三,主库执行update,从库没有该数据 模拟故障 故障恢复 四…...
Spark和Hive的区别
1 、 Hive Hive 是基于 Hadoop 的数据仓库工具,同时又是查询引擎, Spark SQL 只是取代的 Hive 的查询引擎这一部分,企业可以使用HiveSpark SQL 进行开发。 Hive 的主要工作如下: 把HQL 翻译长 map-reduce 的代码,并…...
Type-C 接口电热毯:开启温暖智能新时代
在当今科技迅猛发展的时代,智能家居产品如同璀璨繁星般点缀着我们的生活,从智能灯光的温馨到温控系统的精准,处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中,一款极具创新的电热毯——Type-C 接口电热…...
React 19新特性探索:提升性能与开发者体验
React作为最受欢迎的JavaScript库之一,不断推出新版本以应对日益复杂的应用需求。React 19作为最新的版本,引入了一系列令人兴奋的新特性和改进,旨在进一步提升应用的性能、开发效率和用户体验。 本文将深入探讨React 19的新特性,…...
【数据库】SQL语句基础
【数据库】SQL语句基础 文章目录 【数据库】SQL语句基础一、SQL与数据库二、 SQL语句类型2.1 数据定义语言(DDL)1. 创建数据库:CREATE DATABASE2. 创建表:CREATE TABLE3. 删除表:DROP TABLE4. 修改表结构:A…...
性能】JDK和Jmeter的安装与配置
一、JDK环境配置 1. 下载JDK 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包,下载后安装,安装中记录JDK安装的地址,之后一直点击下一…...
Hadoop、Hbase使用Snappy压缩
1. 前期准备 系统环境:centos7.9 配置信息:8C8G100G hadoop和hbase为单节点部署模式 jdk版本jdk1.8.0_361 1.1. 修改系统时间 timedatectl set-timezone <TimeZone> 1.2. 修改主机名以及主机名和IP的映射 vim /etc/hosts #将自己的主机名以及…...
初试Docker
1. 查看版本 docker --version2. 拉取镜像并查看当前存在的镜像 docker pull hello-world查看是否成功拉取到docker docker images在Docker Desktop 可视化查看 3. 删除镜像 docker rmi xxx4. 启动容器 以下命令使用 mysql镜像启动一个容器,参数为以命令行模…...
【Rust自学】4.5. 切片(Slice)
4.5.0. 写在正文之前 这是第四章的最后一篇文章了,在这里也顺便对这章做一个总结: 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况,但是当数据所有者超…...
番外:ubuntu 下的sqlite3
What Is SQLite? SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world ps:SQLite Home Page sqlite3 的安装: user…...
全脐点曲面当且仅当平面或者球面的一部分
S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 证: 充分性显然,下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…...
Vue之版本演进
一、引言 Vue.js,发音为 /vjuː/,是一款轻量级的用于构建用户界面的渐进式JavaScript框架。自2014年由前Google工程师尤雨溪(Evan You)发布以来,Vue.js凭借其简洁的API、灵活的组件系统以及高效的性能,迅速…...
四川托普信息技术职业学院教案1
四川托普信息技术职业学院教案 【计科系】 周次 第 1周,第1次课 备 注 章节名称 第1章 XML语言简介 引言 1.1 HTML与标记语言 1.2 XML的来源 1.3 XML的制定目标 1.4 XML概述 1.5 有了HTML了,为什么还要发展XML 1.5.1 HTML的缺点 1.5.2 XML的特点 1.6 X…...
《Java核心技术I》Swing中的边框
边框 BorderFactory静态方法创建边框,凹斜面,凸斜面,蚀刻,直线,蒙版,空白。 边框添加标题,BorderFactory.createTitledBorder 组合边框,BorderFactory.createCompoundBorder JCo…...
xlua中自定义lua文件加载的一种方式
此种方法来自LoxodonFramework,这里只做记录 定义一个LoaderBase类,做一个到CustomLoader的隐式类型转换 public abstract class LoaderBase {protected abstract byte[] Load(ref string fileName);/// <summary>/// 隐式类型转换,将…...
Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇
历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…...
EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay1
AssignmentBeta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsSixth Assignment——Beta SprintTeam NameFZUGOObjectiveSprint Essay 1_Day1-Day2 (12.11-12.12)Other Reference1. WeChat Mini Program Design Guide 2. Javascript St…...
github如何给本机绑定 ssh密钥(MACOS)
生成 SSH 密钥 如果没有现成的密钥,执行以下命令来生成一个新的 SSH 密钥: ssh-keygen -t rsa -b 4096 -C "替换为你的邮箱" 添加 SSH 密钥到 SSH 代理 在终端中运行以下命令,启动 SSH 代理: eval "$(ssh-agen…...
使用Python实现基于AR的教育应用:打破课堂的墙壁
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
【数据分析】层次贝叶斯
文章目录 一、 贝叶斯推理二、 层次贝叶斯模型三、 层次贝叶斯的特点四、 数学表述五、推断方法六、应用领域 层次贝叶斯(Hierarchical Bayesian)方法是一种基于贝叶斯推理的统计模型,用于处理具有多个层次结构的数据模型。 它允许我们在同一…...
linux top命令刷新速度的原理
top命令刷新速度的原理 top命令默认会按照一定的时间间隔(通常是3秒)更新系统资源使用情况的显示内容。它通过读取系统的/proc文件系统中的相关文件(如/proc/stat用于CPU信息、/proc/meminfo用于内存信息等)来获取最新的进程和资源…...
bestphp‘s revenge
bestphp’s revenge 知识点 php session反序列化 解题 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); //参数二的位置固定为 $_POST 数组,我们很容易便想到利用 extract 函数进行变量覆盖,以便配合后续利用…...
中化信息与枫清科技深化合作:共探“AI+”产业新生态
随着数字化转型的浪潮席卷全球,数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践,推动打造行业交流平台,驱动产业创新共荣,2024 年 12 月 18 日 -19 日,由中国通信标准化协会主办的“20…...
Java性能测试Benchmark使用总结
如何测量Java代码的性能 在 Java 中,可以使用多种方法来测量一段代码的执行性能。使用 System.currentTimeMillis()是最常见的方法 long startTime System.currentTimeMillis();// 需要测量的代码块 for (int i 0; i < 1000000; i) {// 示例代码 }long endTi…...
完整微服务设计 功能实现
我们将以一个简单的电商系统为例,实现微服务架构,逐步用Java代码详细实现每个模块,并配合注释帮助小白理解。在这个实现中,我们使用以下工具和框架: Spring Boot:用于构建微服务。Spring Cloud:…...
【Java基础面试题025】什么是Java的Integer缓存池?
回答重点 Java的Integer缓存池(Integer Cache)是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因此缓存这些对象可以减少内存分配和垃圾回收的负担,提升性能 在 -128到127范围内的Integer对象会…...
道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”
道可云元宇宙每日简报(2024年12月20日)讯,今日元宇宙新鲜事有: 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日,浙江工商大学发布了《人工智能时代创新型人才培养行动计划》,提出人工…...
树莓派4B 搭建openwrt内置超多插件docker,nas等等使用教程
刷入固件 (想要固件的加我vx wyy7293) bleachwrt-plus-20241112-bcm27xx-bcm2711-rpi-4-squashfs-factory.img上电,并且把网线两头分别插在pi网口上和电脑的网口上(电脑必须断网) 等待网口灯亮,进入192.168.1.1 默认账密 root password 进入系统后更改openwrt的网关地址相关…...
excel 列名是数据表 的字段名 ,单元格的值 是数据表对应字段的值,生成sql插入语句
在 Excel 中,按 Alt F11 打开 VBA 编辑器。在菜单栏选择 插入 -> 模块,在新模块中粘贴以下代码。 VBA 代码 Sub GenerateSQLInsertStatementsToFile()Dim ws As WorksheetDim lastRow As Long, lastCol As Long, i As Long, j As LongDim sql As S…...
【Rust自学】4.3. 所有权与函数
4.3.0 写在正文之前 在学习了Rust的通用编程概念后,就来到了整个Rust的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节: 所有权࿱…...
OpenShift 4 - 多云管理(2) - 配置多集群观察功能
《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...
【机器学习】机器学习的基本分类-强化学习(Reinforcement Learning, RL)
强化学习(Reinforcement Learning, RL)是一种基于试错的方法,旨在通过智能体与环境的交互,学习能够最大化累积奖励的策略。以下是强化学习的详细介绍。 强化学习的核心概念 智能体(Agent) 执行动作并与环境…...
Docker 设置代理的三种方法(2024年12月19日亲自测试)
Docker 设置代理的三种方法 在 Docker 中设置代理是非常常见的需求,尤其是在某些需要通过代理访问外部资源的网络环境下。本文将介绍三种配置 Docker 使用代理的常见方法:通过 daemon.json 配置镜像加速器、通过 daemon.json 配置 HTTP/HTTPS 代理、以及…...
Pycharm配置Python开发环境
Pycharm配置Python开发环境 在之前的文章中,安装好了Pyhton和Pycharm。 打开Pycharm,如下图 配置完成之后,如下图所示:...
【信息系统项目管理师】高分论文:论信息系统项目的进度管理(一体化智能公共数据平台)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划进度管理2、定义活动3、排列活动顺序5、制定进度计划6、控制进度论文 2022年9月,我作为项目经理参加了XX市的一体化智能公共数据平台项目的建设工作,2022年是XX市政府数字化改革的元年,全市上下…...
Chromium CDP 开发(十):Chromium 中增加自己的Domain
1. 引言 在深入了解了 Chromium CDP(Chrome DevTools Protocol)的开发过程之后,接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain,可以避免对已有的 CDP 进行侵入式修改,从而更…...
《基于 Python 的网页爬虫详细教程》
一、引言 在当今信息时代,从互联网上获取大量有价值的数据对于许多领域的研究和分析至关重要。网页爬虫是一种自动化程序,可以从网页上抓取所需的数据。Python 作为一种强大的编程语言,拥有丰富的库和工具,使得网页爬虫的开发变得…...
前端知识图谱 - JavaScript基础(变量和类型)
变量和类型 1. JavaScript 规定了几种语言类型? JavaScript 语言的每一个值都属于某一种数据类型,它规定了 7 种语言类型。语言类型广泛用于变量、函数参数、表达式、函数返回值等场合,根据最新的语言标准,这 7 种语言类型如下&…...