python编程-模块与包

目录

一、模块

1. 模块的概念和作用

代码复用的深入理解

命名空间隔离的更多示例

2. 模块的创建和结构

变量定义的细节

函数定义的拓展

类定义的深化

3. 模块的导入和使用

import语句

from...import语句

import语句的更多注意事项

from...import语句的深入探讨

二、包

1. 包的概念和作用

更好的代码组织的实际应用

模块命名空间的进一步细分的具体示例

2. 包的创建和结构

创建目录结构的细节

__init__.py文件的更多作用

3. 包的导入和使用

导入整个包的其他情况

导入包中的特定模块的补充说明

从包中导入特定内容的详细情况


一、模块

1. 模块的概念和作用

模块是一个包含 Python 代码的文件,它以.py为扩展名。模块是组织 Python 代码的基本单位,其作用主要体现在以下几个方面:

  • 代码复用:将相关的代码放在一个模块中,可以在多个不同的程序或项目中重复使用。例如,一个包含数学运算函数(如加法、乘法、求平方根等)的模块,可以被不同的数据分析程序调用,而无需在每个程序中重新编写这些函数。
  • 命名空间隔离:每个模块都有自己的命名空间,这意味着在不同模块中可以定义相同名称的变量、函数和类,而不会相互冲突。例如,一个名为math_utils.py的模块和一个名为geometry_utils.py的模块都可以定义一个名为distance的函数,它们在各自的模块内部是独立的,只有在明确指定模块名时才会调用相应的函数。

代码复用的深入理解
  • 提高开发效率:通过将常用的功能封装成模块,开发人员在不同项目中无需重复编写相同的代码逻辑,大大节省了开发时间。例如,在多个不同的科学计算项目中,都可能需要进行矩阵运算。将矩阵运算相关的函数(如矩阵加法、乘法、求逆等)封装在一个名为 matrix_utils.py 的模块中,那么在每个新的项目中,只需导入该模块即可直接使用这些功能,无需重新实现复杂的矩阵运算算法。
  • 代码维护便捷:当需要对某个功能进行修改或优化时,只需要在对应的模块中进行操作,而不会影响到其他不相关的代码部分。比如,若发现之前定义的 circle_area 函数在计算大面积圆时存在精度问题,只需在包含该函数的模块(如 math_utils.py)中修改 circle_area 函数的实现逻辑,其他使用该模块的程序在重新导入更新后的模块后,就能使用到改进后的功能。
命名空间隔离的更多示例
  • 避免全局变量冲突:假设在一个大型项目中有多个模块,其中一个模块用于处理用户输入数据,可能会定义一个名为 data 的全局变量来暂存用户输入的原始数据;另一个模块用于数据分析,也可能会定义一个名为 data 的变量来存储经过处理后的分析数据。由于它们在不同的模块中,各自有独立的命名空间,所以这两个 data 变量不会相互干扰,只有在明确指定模块名进行访问时(如 input_module.data 和 analysis_module.data),才能获取到相应模块中的变量值。
  • 函数和类的同名情况:除了前面提到的不同模块可以定义同名函数外,对于类也是如此。例如,一个游戏开发项目中,有一个模块负责角色的动画效果,定义了一个名为 Character 的类来表示游戏角色的动画属性;另一个模块负责角色的属性管理,也定义了一个名为 Character 的类来表示游戏角色的基本属性(如生命值、攻击力等)。在各自的模块中,这些同名的类可以独立地进行实例化和使用,不会产生混淆,只要在使用时通过完整的模块名来指定即可(如 animation_module.Character 和 attribute_module.Character)。

2. 模块的创建和结构

创建一个模块非常简单,只需在文本编辑器中编写 Python 代码,并将其保存为以.py为扩展名的文件即可。一个典型的模块结构可能包括以下部分:

  • 变量定义:模块中可以定义各种类型的变量,这些变量可以是全局的,供模块内的函数和类使用,也可以通过适当的方式(如模块的属性访问)被其他模块使用。例如:
# 在模块中定义全局变量
pi = 3.14159
  • 函数定义:函数是模块的重要组成部分,用于实现各种具体的功能。例如:
# 定义一个计算圆面积的函数
def circle_area(radius):global pireturn pi * radius ** 2
  • 类定义:模块也可以包含类的定义,用于创建对象并实现面向对象编程的各种特性。例如:
# 定义一个表示圆形的类
class Circle:def __init__(self, radius):self.radius = radiusdef area(self):global pireturn pi * self.radius ** 2
变量定义的细节
  • 不同类型变量的用途:除了定义简单的数值型变量(如前面提到的 pi),模块中还可以定义各种类型的变量。例如,可以定义字符串变量来存储一些常量信息,像 version = "1.0" 用于表示模块的版本号;也可以定义列表变量来存储一组相关的数据,如 fruits = ["apple", "banana", "cherry"] 可用于在某个涉及水果处理的模块中存储水果列表;还可以定义字典变量来存储具有键值对关系的数据,比如 user_info = {"name": "John", "age": 30, "email": "john@example.com"} 在用户相关的模块中用于存储用户的基本信息。
  • 变量的作用域和可访问性:模块内定义的变量默认具有模块级别的作用域,即在整个模块内部都可以访问。对于希望被其他模块访问的变量,可以通过在模块名后加上变量名的方式进行访问(如 math_utils.pi)。但如果想要在模块内部限制某些变量的外部访问,可以使用一些命名约定(如在变量名前加上下划线 _)来表示该变量是模块内部使用的私有变量,虽然这种方式并不能完全阻止外部访问,但它是一种约定俗成的标识方法,提示其他开发人员该变量不应该被随意访问。例如,在一个模块中定义了 _internal_variable = 10,其他模块在遵循良好开发规范的情况下,一般不会直接访问这个变量。

函数定义的拓展
  • 函数参数的灵活性:函数的参数可以根据具体需求设置为不同的类型和数量。除了常见的数值型参数(如 radius 在 circle_area 函数中),还可以设置字符串参数、列表参数、字典参数等。例如,定义一个函数 process_text(text, options),其中 text 是要处理的字符串,options 是一个字典,用于存储处理文本的各种选项(如是否转换为大写、是否去除标点符号等)。这样通过不同的参数设置,可以使函数适应多种不同的应用场景。
  • 函数的返回值类型:函数的返回值也可以是各种类型。除了返回简单的数值(如 circle_area 函数返回圆的面积值),还可以返回列表、字典、元组甚至是自定义的对象。例如,定义一个函数 get_user_data(),它可能返回一个包含用户所有信息的字典(如 {"name": "Alice", "age": 25, "email": "alice@example.com", "address": "123 Main St"});或者定义一个函数 generate_random_numbers(n),它返回一个由 n 个随机生成的整数组成的列表。

类定义的深化
  • 类的属性和方法多样性:类中除了定义简单的属性(如 Circle 类中的 radius 属性),还可以定义更复杂的属性。例如,在一个表示汽车的类 Car 中,可以定义 engine_status 属性来表示发动机的状态(可以是一个字符串,如 "running" 或 "stopped"),还可以定义 fuel_level 属性来表示油箱的燃油液位(可以是一个数值)。对于类的方法,除了常见的实例方法(如 Circle 类中的 area 方法),还可以定义类方法和静态方法类方法是与类本身相关联的方法,通常用于创建对象或获取类的相关信息,例如,在 Car 类中可以定义一个类方法 create_car_from_config(config),它根据传入的配置文件(以字典形式表示)来创建一个汽车对象;静态方法是与类相关联但不依赖于具体实例的方法,例如,在 Car 类中可以定义一个静态方法 is_valid_car_model(model),它判断传入的汽车型号是否有效。
  • 类的继承和多态性:类之间可以通过继承关系来扩展功能。例如,在一个图形处理项目中,先定义一个基类 Shape,它具有一些基本属性(如颜色、位置等)和方法(如计算面积的抽象方法 abstractmethod area())。然后可以定义派生类 CircleRectangleTriangle 等,这些派生类继承自 Shape 类,并根据各自的图形特点实现了 area 方法。通过这种继承关系,可以实现多态性,即不同的对象(如 CircleRectangleTriangle)可以调用相同名称的方法(如 area),但根据对象的具体类型,会执行不同的实现逻辑。

3. 模块的导入和使用

  • import语句

    • 基本导入:使用import语句可以将一个模块引入到当前的 Python 程序中。例如,要导入上面提到的包含数学运算相关代码的模块(假设模块名为math_utils),可以使用以下语句:
import math_utils# 使用模块中的变量
print(math_utils.pi)# 使用模块中的函数
result = math_utils.circle_area(2)
print(result)# 使用模块中的类
my_circle = math_utils.Circle(3)
print(my_circle.area())
  • 导入时重命名:可以在导入模块时给模块指定一个别名,这在模块名较长或存在命名冲突时很有用。例如:
import math_utils as muprint(mu.pi)

  • from...import语句

    • 导入特定内容:如果只需要使用模块中的某些特定变量、函数或类,可以使用from...import语句。例如:
from math_utils import pi, circle_areaprint(pi)
result = circle_area(2)
print(result)
  • 导入所有内容(不推荐):可以使用from...import *语句导入模块中的所有内容,但这种方式可能会导致命名冲突,并且使代码的可读性和可维护性变差,因此不建议在正式项目中使用。例如:
from math_utils import *print(pi)
result = circle_area(2)
print(result)

import语句的更多注意事项

  • 导入路径问题:当导入模块时,如果模块不在当前目录下,可能需要指定正确的导入路径。在 Python 中,可以通过设置 sys.path 来添加模块所在的目录搜索路径中。例如,如果 math_utils 模块在一个名为 utils 的目录下,而当前程序在另一个目录中运行,那么可以在程序开头添加以下代码来确保能够正确导入 math_utils 模块:
import sys
sys.path.append('path/to/utils')
import math_utils
  • 循环导入问题:在复杂的项目中,可能会出现循环导入的情况,即模块 A 导入模块 B,而模块 B 又导入模块 A。这种情况会导致 Python 解释器在运行时出现困惑,因为它不知道应该先执行哪个模块的代码。为了避免循环导入,通常需要重新设计模块的结构或调整导入的顺序。例如,可以将一些共同需要的代码提取到一个独立的模块中,或者通过函数参数传递等方式来代替直接的模块导入。

from...import语句的深入探讨

  • 选择性导入的优势:使用 from...import 语句选择性地导入模块中的特定内容,可以减少内存占用和提高代码运行效率。因为只导入了需要使用的部分,而不是整个模块,所以在程序启动时,不需要加载整个模块的所有代码。例如,在一个只需要使用 math_utils 模块中的 circle_area 函数的程序中,通过 from math_utils import circle_area 导入,相比于导入整个 math_utils 模块,在启动时会加载更少的代码,从而可能提高运行速度。
  • 导入特定内容的潜在风险:虽然 from...import 语句选择性地导入特定内容很方便,但也存在一些潜在风险。首先,可能会导致命名冲突,如果在不同的模块中导入了相同名称的内容,并且没有通过完整的模块名来区分,就会出现问题。例如,从 math_utils 模块中导入了 pi,又从另一个模块中也导入了 pi,在使用时就需要格外小心,以免混淆。其次,可能会破坏模块的整体性,因为只导入了部分内容,可能会导致对模块中其他相关内容的理解和使用出现困难,特别是当需要对模块进行维护或修改时,可能会因为不清楚整个模块的结构而出现问题。

二、包

1. 包的概念和作用

包是一种用于组织模块层次结构,它是一个包含多个模块的目录。包的作用主要包括以下几点:

  • 更好的代码组织:当项目规模较大,模块数量众多时,将相关的模块放在一个包中可以使代码结构更加清晰。例如,一个 Web 应用程序可能有处理用户认证、数据库连接、页面渲染等多个功能模块,将这些模块分别放在不同的包(如auth包、db包、views包)中,可以方便地对代码进行管理和维护。
  • 模块命名空间的进一步细分:包为模块提供了更高层次的命名空间。这意味着不同包中的模块可以有相同的名称,而不会产生冲突。例如,一个用于数据分析的stats模块和一个用于网络状态监测的stats模块,可以分别放在不同的包中,从而避免混淆。

更好的代码组织的实际应用
  • 分层架构的体现:在大型企业级应用中,包的使用可以很好地体现分层架构。例如,在一个电商应用中,可能有以下几个包:models 包用于存放数据库模型类,这些类与数据库表一一对应,定义了数据的存储结构和查询方法;views 包用于存放视图函数,这些函数负责处理用户请求并返回相应的响应;controllers 包用于存放控制器类,这些类协调模型和视图之间的关系,实现业务逻辑的处理。通过将不同功能的模块分别放在这些包中,使得整个项目的代码结构清晰明了,便于开发人员理解和维护。
  • 功能模块的分组:除了按照分层架构进行分组外,还可以根据功能模块对代码进行分组。比如,在一个多媒体处理应用中,可以将音频处理相关的模块放在一个 audio 包中,视频处理相关的模块放在一个 video 包中,图像处理相关的模块放在一个 image 包中。这样,当需要对某一类功能进行修改或优化时,只需要在相应的包内进行操作,而不会影响到其他功能模块的代码。

模块命名空间的进一步细分的具体示例
  • 不同领域的同名模块:考虑一个科研项目,涉及到物理学和化学两个领域。在物理学领域,有一个模块用于计算物理量的变换,命名为 transformations.py;在化学领域,也有一个模块用于化学反应的转换,也命名为 transformations.py。通过将这两个模块分别放在不同的包中,如 physics 包和 chemistry 包,就可以避免混淆,并且在使用时,通过完整的包名和模块名(如 physics.transformations.transformations 和 chemistry.transformations.transformations)来区分它们。
  • 企业级应用中的同名模块:在一个大型企业级应用中,不同部门可能会开发出同名的模块。例如,市场部可能有一个模块用于市场调研数据的分析,命名为 analysis.py;研发部也可能有一个模块用于产品研发数据的分析,也命名为 analysis.py。将这两个模块分别放在各自部门的包中,如 marketing 包和 research 包,就可以避免混淆,并且在使用时,通过完整的包名和模块名(如 marketing.analysis.analysis 和 research.analysis.analysis)来区分它们。

2. 包的创建和结构

创建一个包需要以下步骤:

  • 创建目录结构:首先创建一个目录作为包的根目录,然后在这个目录下创建多个模块文件.py文件)和一个特殊__init__.py文件。
  • 在 Python 3 中,__init__.py文件可以为空,但它的存在是为了告诉 Python 这个目录是一个包。例如,创建一个名为my_package的包,其结构可能如下:
my_package/__init__.pymodule1.pymodule2.py
  • __init__.py文件的作用
    • 初始化包:当一个被导入时,__init__.py文件中的代码会被执行,这可以用于进行一些包的初始化操作,如初始化全局变量、导入子模块等。例如:
# 在__init__.py文件中初始化全局变量
package_variable = "This is a variable in my_package"# 导入子模块,这样在导入包时可以直接访问子模块
from. import module1
from. import module2
  • 控制包的公开接口:__init__.py文件可以通过定义__all__变量来控制使用from...import *语句导入包时哪些模块或对象是可见的。例如:
# 在__init__.py文件中定义__all__
__all__ = ["module1", "module2"]

创建目录结构的细节
  • 多层包结构:除了创建简单的单层包结构(如前面提到的 my_package ),还可以创建多层包结构。例如,在一个大型软件项目中,可能创建一个 main 包,在 main 包下有 utils 、 models 、 views 等子包,而在 utils 子包下又有 math_utils 、 string_utils 等更 子包。这种多层包结构可以进一步细化代码组织,使代码结构更加复杂但也更加有序
  • 目录命名规范:在创建包的目录时,建议遵循一些命名规范,以提高代码的可读性和可维护性。例如,包目录的名称一般采用小写字母和连字符(-)的组合,避免使用大写字母、空格和特殊字符(除了连字符)。这样可以使目录名称看起来更加简洁、清晰,并且符合大多数编程语言的命名习惯。

__init__.py文件的更多作用
  • 模块的动态导入:除了在 __init__.py 文件中进行静态的子模块导入(如前面提到的 from. import module1 , from. import module2 ),还可以进行动态导入。例如,可以根据某些条件(如用户的选择、系统的运行状态等)来决定是否导入某个子模块。假设在 __init__.py 文件中,有以下代码:
if some_condition:from. import module3

这样,只有当 some_condition 成立时,才会导入 module3 ,这对于一些需要根据不同情况灵活配置的项目来说非常有用。

  • 包的版本控制:在 __init__.py 文件中,还可以进行包的版本控制。例如,可以定义一个变量 version 来表示包的版本号,如 version = "1.0.0" 。这样,其他模块在导入该包时,可以通过 package.version 来获取包的版本号,便于版本管理和跟踪。

3. 包的导入和使用

  • 导入整个包:可以使用import语句导入整个包,然后通过包名访问包中的模块和对象。例如:
import my_packageprint(my_package.package_variable)
my_package.module1.module1_function()

  • 导入包中的特定模块:使用import语句结合包名和模块名来导入包中的特定模块。例如:
import my_package.module1my_package.module1.module1_function()

  • 从包中导入特定内容:使用from...import语句从包中的模块导入特定内容。例如:
from my_package.module1 import module1_functionmodule1_function()

导入整个包的其他情况
  • 包的相对导入问题:当导入整个包时,可能会遇到相对导入的问题。在多层包结构中,如果要从一个子包中导入另一个子包,可能需要使用相对导入的方式。例如,在上面提到的 main 包下的 utils 子包中,要从 math_utils 子包中导入 string_utils 子包,可以使用以下方式:
from. import string_utils

这里的 . 表示当前包,也就是 math_utils 所在的 utils 子包。相对导入的方式可以避免使用绝对导入时可能出现的导入路径问题,但需要注意的是,相对导入在一些情况下(如在脚本的主程序中)可能不适用,需要根据具体情况选择合适的导入方式。

  • 包的重命名问题:和模块导入时一样,在导入整个包时也可以给包指定一个别名。例如,将 my_package 导入时重命名为 mp ,可以使用以下方式:
import my_package as mp

这样,在后续使用时,可以通过 mp 来访问 my_package 的内容,这在包名较长或存在命名冲突时很有用。

导入包中的特定模块的补充说明
  • 模块的嵌套导入:在导入包中的特定模块时,可能会遇到模块的嵌套导入情况。例如,在一个 main 包下有 utils 、 models 、 views 等子包,在 utils 子包下有 math_utils 、 string_utils 等子包。如果要从 views 子包中导入 math_utils 子包中的某个函数,可能需要先导入 math_utils 子包,然后再从 math_utils 子包中导入所需的函数。具体操作如下:
import main.utils.math_utils as mu
from mu import required_function

这里先通过 import main.utils.math_utils as mu 导入了 math_utils 子包并给它重命名为 mu ,然后再通过 from mu import required_function 从 mu 中导入了所需的函数。这种嵌套导入的方式可以在复杂的多层包结构中准确地获取所需的内容。

  • 导入模块的优先级问题:在导入包中的特定模块时,可能会出现导入模块的优先级问题。例如,在一个项目中,有两个不同的包 package1 和 package2 ,每个包中都有一个 test_module 模块。当从一个外部的程序中导入 test_module 时,可能会出现以下两种情况:一是根据导入的顺序,先导入的那个包中的 test_module 会被导入;二是如果使用 from...import * 语句,那么可能会根据 __init__.py 文件中定义的 __all__ 变量来决定哪个包中的 test_module 会被导入。因此,在导入包中的特定模块时,需要注意这种优先级问题,以确保准确地导入所需的模块。

从包中导入特定内容的详细情况
  • 导入内容的选择和限制:在从包中导入特定内容时,除了通过 from...import 语句直接导入所需的内容外,还可以通过控制 __init__.py 文件中的 __all__ 变量来选择和限制导入的内容。例如,在一个 main 、 utils 、 models 、 views 等子包的 main 包中,在 utils 子包的 __init__.py 文件中定义 __all__ 为 ["math_utils", "string_utils"] ,那么从 utils 、 models 、 views 等子包中导入特定内容时,只有 math_utils

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 企业微信机器人推送消息 windows服务应用程序的使用

C# 企业微信机器人推送消息 先添加一个机器人! 然后查看机器人就可以得到一个 webhook 特别特别要注意:一定要保护好机器人的webhook地址,避免泄漏! 然后开始写代码 ,只需要httpPost 调用一下这个地址就可以发送消息了。 首先我…

JavaSE:16、Java IO

学习 资源1 学习资源 2 1、文件字节流 import java.io.*;import java.util.*;public class Main {public static void main(String[] args) {//try-with-resource语法,自动closetry(FileInputStream file new FileInputStream("E:/text.txt")) {System.out.prin…

Z-BlogPHP显示错误Undefined array key 0 (set_error_handler)的解决办法

今天打开博客的时候,意外发现页面,打开均显示错误:Undefined array key 0 (set_error_handler)。 博客程序采用的是Z-BlogPHP。百度了一圈没有找到解决办法,在官方论坛里也没找到解决办法。 于是开始自己排查原因。我服务器采用…

【vue3|第29期】Vue3中的插槽:实现灵活的组件内容分发

日期:2024年10月24日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不…

【分立元件】低阻值电阻器的趋势(Face down type)

低阻值电阻器不仅可正确显示电阻器的阻值,还是小型、大功率产品或散热性优良的产品所必不可少的。 为了应对大功率或提高散热性,一般使用较大贴片尺寸的产品或长边电极型产品。 但是,如果贴片尺寸变大,就需要一定的贴装空间,还会减弱温度循环试验强度。 长边电极型…

利用Docker搭建一套Mycat2+MySQL8一主一从、读写分离的最简单集群(保姆教程)

文章目录 1、Mycat介绍1.1、mycat简介1.2、mycat重要概念1.3、Mycat1.x与Mycat2功能对比1.2、主从复制原理 2、前提准备3、集群规划4、安装和配置mysql主从复制4.1、master节点安装mysql8容器4.2、slave节点安装mysql8容器4.2、配置主从复制4.3、测试主从复制配置 5、安装mycat…

使用pandas进行数据分析

文章目录 1.pandas的特点2.Series2.1新建Seriws2.2使用标签来选择数据2.3 通过指定位置选择数据2.4 使用布尔值选择数据2.5 其他操作2.5.1 修改数据2.5.2 统计操作2.5.3 缺失数据处理 3.DataFrame3.1 新建 DataFrame3.2 选择数据3.2.1 使用标签选择数据3.2.2 使用 iloc 选择数据…

yolov11的onnx模型C++ 调用

yolov11的onnx模型C调用 效果图一、python调用二、onnx模型导出三、python的onnx调用调用检测模型调用分割模型 四、C的onnx模型调用五 、视频流的检测后续 效果图 一、python调用 本文只记录生成的yolov11模型如何调用,其他可参考各种yolov11博客 模型下载&#x…

万年历制作

#include<stdio.h> int main() { int year0, month0, day0, y0, m0&#xff1b; scanf_s("%d %d", &year,&month); //判断闰年 for(y1900;y<year;y) { if ((y % 4 0 && y % 100 ! 0) || y % 400 0) …

redis内存打满了怎么办?

1、设置maxmemory的大小 我们需要给 Redis设置maxmemory的大小&#xff0c;如果不设置的话&#xff0c;它会受限于系统的物理内存和系统对内存的管理机制。 2、设置内存的淘汰策略 内存的淘汰策略分为 8 种&#xff0c;从淘汰范围来说分为从所有的key中淘汰和从设置过期时间…

C语言[求x的y次方]

C语言——求x的y次方 这段 C 代码的目的是从用户输入获取两个整数 x 和 y &#xff0c;然后计算 x 的 y 次幂&#xff08;不过这里有个小错误&#xff0c;实际计算的是 x 的 (y - 1) 次幂&#xff0c;后面会详细说&#xff09;&#xff0c;最后输出结果。 代码如下: #include…

Apache Paimon Catalog

Paimon Catalog可以持久化元数据&#xff0c;当前支持两种类型的metastore&#xff1a; 文件系统&#xff08;默认&#xff09;&#xff1a;将元数据和表文件存储在文件系统中。hive&#xff1a;在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。 2.2.1 文件系统…

centeros7 编译ffmpeg

使用yum安装的路似乎已经堵住了&#xff0c;请求的镜像全是404或503 1.打开终端并使用yum安装EPEL存储库(Extra Packages for Enterprise Linux)&#xff1a;sudo yum install epel-release2.接下来&#xff0c;使用以下命令来安装FFmpeg&#xff1a;sudo yum install ffmpeg …

remote: HTTP Basic: Access denied

解决方法 输入&#xff1a; git config --system --unset credential.helper 再次进行 Git 操作&#xff0c;输入正确的用户名&#xff0c;密码即可。

static、 静态导入、成员变量的初始化、单例模式、final 常量(Content)、嵌套类、局部类、抽象类、接口、Lambda、方法引用

static static 常用来修饰类的成员&#xff1a;成员变量、方法、嵌套类 成员变量 被static修饰&#xff1a;类变量、成员变量、静态字段 在程序中只占用一段固定的内存&#xff08;存储在方法区&#xff09;&#xff0c;所有对象共享可以通过实例、类访问 (一般用类名访问和修…

OpenHarmony(1)开发环境搭建

一&#xff1a;开源项目 OpenHarmony是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff0c;目标是面向全场景、全连接、全智能时代&#xff0c;基于开源的方式&#xff0c;搭建一个智能终端设备操作系统的框架和平台&#xff0…

使用SQL在PostGIS中创建各种空间数据

#1024程序员节&#xff5c;征文# 一、目录 1. 概述 2. 几何&#xff08;Geometry&#xff09;类型 创建点 创建线 创建面 3. 地理&#xff08;Geography&#xff09;类型 地理点&#xff08;GEOGRAPHY POINT&#xff09; 地理线串&#xff08;GEOGRAPHY LINESTRING&#xff…

Redis 单机、主从、哨兵和集群架构详解和搭建

目录 前言 单机部署 检查安装 gcc 环境 下载安装 Redis 启动 Redis 关闭 Redis 配置Redis 主从部署 整体架构图 主从复制配置 重启 Redis 验证 主从复制的作⽤ 主从复制缺点 哨兵部署&#xff08;Sentinel&#xff09; 整体架构图 哨兵模式配置 启动哨兵 验证…

MySQL-32.索引-操作语法

一.语法 二.代码实现 指定某个字段为主键&#xff0c;其实就是建立一个主键索引。而指定某个字段唯一&#xff0c;就是建立一个唯一索引。 -- 索引 -- 创建&#xff1a;为tb_emp表的name字段建立一个索引 create index idx_emp_name on tb_emp(name);-- 查询&#xff1a;查…

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…