当前位置: 首页 > news >正文

Python编程的黑暗魔法:模块与包的神秘力量!

哈喽,我是阿佑,今天给大家讲讲模块与包~

文章目录

    • 1. 引言
      • 1.1 模块化编程的意义
      • 1.2 Python中模块与包的概念概述
    • 2. 背景介绍
      • 2.1 Python模块系统
        • 模块的定义与作用
        • Python标准库简介
      • 2.2 包的结构与目的
        • 包的定义与目录结构
        • 包在项目组织中的重要性
    • 3. 创建与使用模块
      • 3.1 定义模块
        • 创建自定义模块的步骤
        • 导入模块的方式
      • 3.2 模块的命名空间与作用域
        • 全局变量与局部变量
        • `__name__`属性与主模块检测
      • 3.3 相对导入与绝对导入
        • 在包内引用其他模块的规则
    • 4. 包的创建与管理
      • 4.1 初始化文件`__init__.py`
        • 文件的作用与可选内容
        • 包的导入行为控制
      • 4.2 包的分层与组织
        • 复杂项目中的多级目录结构
        • 包的安装与依赖管理
      • 4.3 `setup.py`与分发包
        • 构建与发布自定义包
        • PyPI与pip的使用
    • 5. 模块与包的最佳实践
      • 5.1 代码重用与解耦
        • 如何设计高效模块
        • 避免循环导入与紧密耦合
      • 5.2 文档与测试
        • 编写模块文档字符串
        • 单元测试与包的自动化测试
      • 5.3 性能考量与优化
        • 模块加载性能
        • 使用缓存与延迟导入策略
    • 6. 结论
      • 模块化与包化编程的综合优势
        • 综合优势
      • 对于项目规模与维护性的长远影响
      • 结语
    • 参考文献
      • Python官方文档
      • 书籍
      • 在线资源和教程
      • 社区和论坛
      • 视频教程

1. 引言

1.1 模块化编程的意义

想象一下,你是一位大厨,面前摆着一堆食材,准备做一顿丰盛的晚餐。如果把每种食材都混在一起,那结果肯定是一团糟,味道混乱,难以下咽。但如果你能将它们分门别类,按照食谱一步步来,那么最终的成品不仅美观,而且味道层次分明,令人回味无穷。

同样,编程也是如此。模块化编程就像是将食材分门别类,将代码分解成独立的模块,每个模块负责一个特定的功能。这样做的好处是显而易见的:

  • 易于管理:就像整理厨房一样,代码也更容易维护和管理。
  • 提高复用性:模块化的代码可以被重复使用,避免重复造轮子。
  • 增强可读性:清晰的结构让其他开发者(或未来的你)更容易理解代码的意图。

1.2 Python中模块与包的概念概述

在Python的世界里,模块(module)就像是一个个独立的小抽屉,每个抽屉里装着不同的工具和材料。你可以想象这些抽屉上都贴着标签,比如“数学计算”、“数据处理”、“图形界面”等,这样你就能快速找到需要的工具。

而包(package),则是一个更大的储物柜,里面可以包含多个模块,甚至还可以包含其他的储物柜。这就像是你在厨房里有一个专门放调料的大柜子,里面不仅有各种香料,还有不同的调料瓶和罐子。

在Python中,模块可以是一个.py文件,而包则是一个包含__init__.py文件的目录。这个__init__.py文件就像是柜子的门,告诉Python:“嘿,这是一个包,你可以从这里开始探索里面的模块。”

通过模块化和包化,Python代码不仅结构清晰,而且易于扩展和维护。就像一个精心设计的厨房,每个工具和材料都放在最合适的地方,让你的编程之旅更加顺畅和愉快。

接下来,我们将一步步深入了解如何创建和使用这些“模块抽屉”和“包柜子”,以及如何将它们组织得井井有条。别急,我们慢慢来,一步步构建起我们的编程厨房。

在这里插入图片描述

2. 背景介绍

2.1 Python模块系统

在Python的编程世界里,模块就像是那些神奇的魔法卡片。每个卡片上都刻着不同的咒语,当你需要施展某种魔法时,只需拿出相应的卡片,念出咒语,魔法就会应声而出。在Python中,这些魔法卡片就是模块,它们是Python代码的最小单位。

模块的定义与作用

模块是Python中一种组织代码的方式,它允许我们将相关的功能封装在一起。这样做的好处是,你可以轻松地在不同的程序中重复使用这些功能,而无需每次都重新编写代码。就像魔法卡片,你只需要记住咒语,就能随时施展魔法。

Python标准库简介

Python的标准库就像是一个大宝库,里面装满了各种神奇的魔法卡片。这些卡片由Python社区精心制作,涵盖了从文件操作到网络通信,从数据处理到图形界面的各个方面。无论你想做什么,几乎总能找到一张合适的卡片来帮助你。

2.2 包的结构与目的

包的定义与目录结构

如果说模块是魔法卡片,那么包就是装这些卡片的盒子。包允许我们将相关的模块组织在一起,形成一个更大的魔法集合。在Python中,一个包通常是一个包含__init__.py文件的目录。这个文件就像是盒子的标签,告诉Python这是一个包,而不是一个普通的文件夹。

包在项目组织中的重要性

在大型项目中,代码量可能会非常庞大。如果没有合理的组织,代码就会变得混乱不堪,难以管理和维护。包的作用就像是图书馆的书架,它帮助我们将书籍(模块)分类存放,使得查找和使用变得更加方便。

通过使用包,我们可以将项目划分为不同的功能区域,每个区域都有自己的模块和子包。这样,当项目规模扩大时,我们仍然能够保持代码的整洁和有序。就像一个精心管理的图书馆,无论藏书量有多大,读者总能找到他们想要的书。

现在,我们已经知道了模块和包是什么,以及它们在Python编程中的重要性。接下来,我们将学习如何创建和使用这些模块和包,就像学习如何制作和使用魔法卡片一样。准备好了吗?让我们继续我们的魔法之旅吧!

3. 创建与使用模块

3.1 定义模块

在Python的世界里,模块就像是你的个人工具箱,里面装满了你精心挑选的工具。当你需要完成某项任务时,你只需打开工具箱,拿出合适的工具,就能轻松搞定。

创建自定义模块的步骤

想象一下,你要为即将到来的野餐准备一些特色小吃。首先,你需要一个食谱(也就是模块的代码),然后按照食谱准备食材和工具。创建一个Python模块的步骤大致如下:

  1. 创建一个.py文件:这就是你的食谱,你可以在里面写下所有的代码。
  2. 编写功能代码:就像食谱上的步骤,你写下如何完成特定的任务。
  3. 保存文件:将食谱保存好,这样你以后可以随时使用。
导入模块的方式

导入模块就像是从你的工具箱中拿出工具。在Python中,你可以通过几种方式来导入模块:

  • import:这就像是拿出整个工具箱,你可以访问里面所有的工具。
  • from...import:这就像是只拿出你需要的那个特定工具,更加直接和方便。

举个例子,假设你有一个专门用于数学计算的模块叫做math_tools.py,你可以这样导入:

# 导入整个模块
import math_tools# 使用模块中的功能
result = math_tools.add(5, 3)# 只导入需要的函数
from math_tools import add# 直接使用导入的函数
result = add(5, 3)

3.2 模块的命名空间与作用域

在Python中,每个模块都有自己的命名空间,就像是每个工具箱都有自己的标签。这样,即使两个模块中有相同名称的工具,它们也不会互相干扰。

全局变量与局部变量

全局变量就像是你家里公用的工具,任何模块都可以使用。而局部变量则像是你个人工具箱里的私人工具,只有你自己的模块才能使用。

__name__属性与主模块检测

__name__属性是Python的一个特殊变量,它可以帮助我们区分模块是被直接运行还是被导入。这就像是你工具箱上的一个特殊标签,告诉你这个工具箱是家里的公用工具箱,还是你个人的。

举个例子,假设你有一段代码,你希望只有在直接运行模块时才执行,你可以这样做:

if __name__ == '__main__':# 这段代码只有在直接运行模块时才会执行print("模块正在被直接运行")

3.3 相对导入与绝对导入

当你的项目变得越来越大,你的工具箱(模块)也会越来越多。这时候,你需要一种方法来告诉Python,你想要使用的是哪个工具箱。

在包内引用其他模块的规则

相对导入就像是告诉你的朋友:“嘿,去隔壁的工具箱里拿那个锤子给我。”而绝对导入则像是告诉他们:“去车库的第三个架子上拿那个锤子。”

在Python中,你可以使用点(.)来进行相对导入,例如:

# 假设当前模块和另一个模块在同一包下
from .another_module import some_function

绝对导入则需要指定完整的路径,就像告诉朋友完整的地址一样:

# 指定完整的模块路径
from some_package.another_package.another_module import some_function

现在,大伙们已经知道了如何创建自己的模块,如何导入它们,以及如何处理模块中的变量和作用域。接下来,我们将探索如何将这些模块组织成更大的包,就像将工具箱整理成更大的工具柜一样。准备好了吗?让我们继续前进吧!
在这里插入图片描述

4. 包的创建与管理

4.1 初始化文件__init__.py

想象一下,你有一个大书架,上面摆满了各种书籍。为了告诉别人这个书架上有什么书,你需要一个目录或者索引。在Python的包世界里,__init__.py文件就扮演着这样的角色。

文件的作用与可选内容

__init__.py文件是包的入口,它告诉Python:“嘿,这是一个包,不是普通的文件夹。”这个文件里可以包含一些初始化代码,比如导入包中常用的模块,或者设置一些包级别的变量。

举个例子,假设你有一个叫做my_package的包,里面有几个模块,你可以在__init__.py文件中这样写:

# my_package/__init__.py
from .module1 import some_function as default_function
from .module2 import another_function__all__ = ['default_function', 'another_function']

这样,当你导入my_package时,default_functionanother_function就会被自动导入。

包的导入行为控制

通过__init__.py文件,你还可以控制包的导入行为。比如,你可以决定哪些模块是包的一部分,哪些不是。

4.2 包的分层与组织

复杂项目中的多级目录结构

想象一下,你有一个巨大的图书馆,里面有很多书架,每个书架上都有很多书。为了管理这个图书馆,你需要一个系统。在Python中,包的分层结构就类似于这个系统。

你可以创建多级目录结构,每个目录都可以是一个包,每个包都有自己的__init__.py文件。这样,你就可以按照功能将代码组织得井井有条。

举个例子,你的项目结构可能是这样的:

my_project/
│
├── my_package/
│   ├── __init__.py
│   ├── module1.py
│   ├── module2.py
│   └── sub_package/
│       ├── __init__.py
│       ├── sub_module1.py
│       └── sub_module2.py
│
└── main.py
包的安装与依赖管理

当你的项目越来越大,你可能需要将你的包安装到Python环境中,这样你就可以像使用标准库一样使用它。这就像是将你的书正式编入图书馆的目录,让任何人都能找到它们。

你可以使用setuptools来安装你的包。在你的项目根目录下,创建一个setup.py文件,内容可能如下:

# setup.py
from setuptools import setup, find_packagessetup(name='my_package',version='0.1',packages=find_packages(),# 其他元数据...
)

然后,你可以通过以下命令安装你的包:

pip install .

或者,如果你想在开发过程中安装,可以使用:

pip install -e .

这样,你的包就会安装到Python环境中,并且任何对源代码的更改都会立即反映出来。

4.3 setup.py与分发包

构建与发布自定义包

setup.py文件是构建和发布自定义包的关键。它定义了包的元数据,比如包名、版本、依赖关系等。

PyPI与pip的使用

当你的包准备好了,你可以将其发布到PyPI(Python Package Index),这是一个公共的Python包仓库。这样,其他人就可以通过pip安装你的包,就像安装其他任何Python包一样。

发布到PyPI的过程包括打包你的包、创建一个.pypirc文件来存储你的PyPI凭据,然后使用twine上传你的包。

python setup.py sdist bdist_wheel
twine upload dist/*

讲了如何创建包、如何通过__init__.py文件来控制包的行为,以及如何将包安装到Python环境中。接下来,我们将探讨一些模块和包的最佳实践,帮助你写出更加高效、可维护的代码。准备好了吗?让我们继续前进吧!

5. 模块与包的最佳实践

5.1 代码重用与解耦

在编程的世界里,我们就像是一群勤劳的园丁,精心培育着代码的花园。而模块化就像是我们手中的园艺工具,帮助我们修剪、嫁接,让花园更加繁茂而有序。

如何设计高效模块

设计高效的模块就像是做一道美味的菜肴。你需要精心挑选食材(功能),按照正确的顺序(逻辑)来烹饪,最终才能做出色香味俱全的佳肴。

  • 单一职责原则:每个模块只负责一项功能,就像每个调料瓶只装一种调料。
  • 高内聚,低耦合:模块内部的功能紧密相关,但与其他模块保持独立,就像你的工具箱里锤子、螺丝刀各司其职,互不干扰。
避免循环导入与紧密耦合

循环导入就像是你不小心把耳机线缠在一起,解开它们可能需要花费一番功夫。在Python中,循环导入发生在两个或多个模块相互导入对方,形成一个闭环。为了避免这种情况,我们可以使用以下几种策略:

  • 延迟导入:只在需要时才导入模块,而不是在模块顶部就导入。
  • 重新组织代码:调整模块结构,消除循环依赖。

5.2 文档与测试

编写模块文档字符串

文档就像是你做菜时的食谱,它告诉别人(或未来的你)这个模块是做什么的,如何使用。在Python中,我们使用文档字符串(docstrings)来提供模块、函数、类和方法的文档。

举个例子:

def add(a, b):"""返回两个数的和。参数:a (int or float): 第一个加数b (int or float): 第二个加数返回:int or float: 两个数的和"""return a + b
单元测试与包的自动化测试

单元测试就像是你花园里的小实验,通过它们,你可以确保每个模块都能正常工作,就像确保每株植物都能茁壮成长。

  • 编写测试用例:为每个模块编写测试用例,确保它们的功能按预期工作。
  • 使用测试框架:Python标准库中的unittest或第三方库如pytest可以帮助你组织和运行测试。

5.3 性能考量与优化

模块加载性能

模块加载性能就像是你花园的灌溉系统,如果灌溉系统效率高,植物就能更快地得到水分。在Python中,我们可以通过以下方式来优化模块加载性能:

  • 使用轻量级模块:保持模块简洁,避免加载不必要的大型模块。
  • 使用内置模块:内置模块通常比第三方模块加载更快。
使用缓存与延迟导入策略

缓存就像是你的工具箱,当你需要某个工具时,直接从工具箱中取出比重新制作要快得多。在Python中,我们可以使用缓存来存储那些计算成本高昂的结果,避免重复计算。

延迟导入则是在真正需要某个模块时才导入它,这样可以减少程序启动时的加载时间。


这就是模块与包的最佳实践。现在,咱们已经知道了如何设计高效的模块,如何编写文档和测试,以及如何考虑性能和优化。这些实践将帮助你构建一个健康、可持续的代码花园。准备好了吗?让我们继续前进,让咱们的代码花园更加繁荣昌盛!
在这里插入图片描述

6. 结论

模块化与包化编程的综合优势

想象一下,你正在玩一款策略游戏,你的目标是建造一个繁荣的城市。模块化和包化编程就像是你手中的工具和策略,帮助你构建一个强大而有序的帝国。

综合优势
  • 易于维护:模块化编程就像是给你的城市划分区域,每个区域负责不同的功能,这样当某个区域出现问题时,你只需要关注那一部分,而不是整个城市。
  • 提高可读性:清晰的模块和包结构就像是城市地图,让新来的居民(开发者)能够快速了解城市布局,轻松找到他们需要去的地方。
  • 促进协作:当多个开发者共同工作在一个项目上时,模块化和包化可以帮助他们划分职责,减少冲突,就像城市中的不同部门协同工作一样。

对于项目规模与维护性的长远影响

随着项目的增长,代码的复杂性也会随之增加。如果没有合理的模块化和包化,项目很快就会变得难以管理和维护,就像一个没有规划的城市,随着人口的增长,交通、资源分配等问题会逐渐暴露出来。

通过模块化和包化,我们可以:

  • 控制复杂性:将大型项目分解成小的、可管理的部分,就像将一个大城市建设成多个小社区。
  • 提高扩展性:当需要添加新功能时,可以轻松地添加新的模块或包,而不影响现有结构。
  • 降低风险:通过单元测试和清晰的结构,可以减少引入新功能时对现有系统的影响。

结语

在这段旅程中,我们一起探索了Python的模块化和包化编程。我们学习了如何创建模块,如何组织包,如何编写文档和测试,以及如何优化性能。这些技能就像是你的编程工具箱,帮助你构建更加强大、灵活和可维护的代码。

就像一个精心规划的城市,你的代码也应该有清晰的结构和合理的组织。随着你的编程技能的提高,你会发现,模块化和包化编程不仅仅是一种技术手段,更是一种艺术,一种创造有序和美的艺术。

这就是我们的旅程的终点,但也是你作为开发者的新起点。带着你学到的知识,去构建你的代码帝国吧!记住,代码就像是一座城市,需要细心规划和维护。祝你在编程的道路上越走越远,创造出更多令人惊叹的作品!


参考文献

Python官方文档

  • Python官方文档 - 模块化编程: Python官方文档
    • 这是学习Python模块化编程的权威指南,详细介绍了模块的定义、导入机制以及如何编写模块。

书籍

  • 《Python Cookbook》: David Beazley 和 Brian K. Jones 著
    • 这本书提供了大量实用的编程技巧和最佳实践,包括模块化和包化编程的相关章节。

在线资源和教程

  • Real Python: Real Python

    • Real Python提供了丰富的教程和指南,涵盖从基础到高级的Python编程主题。
  • Python Module of the Week: PyMOTW

    • PyMOTW是一个深入探讨Python标准库中各个模块的教程系列。
  • GitHub上的Python项目: GitHub

    • 通过查看和学习GitHub上的开源Python项目,你可以获得实际的模块化和包化编程经验。

社区和论坛

  • Stack Overflow: Stack Overflow

    • Stack Overflow是一个流行的编程问答社区,你可以在这里找到关于Python模块化和包化编程的问题和答案。
  • Reddit的Python版块: Reddit Python

    • Reddit的Python版块是另一个可以获取信息、讨论问题和分享经验的地方。

视频教程

  • Coursera上的Python课程: Coursera

    • Coursera提供了多门由顶尖大学教授讲授的Python课程,包括模块化编程。
  • YouTube上的Python教程: YouTube

    • YouTube上有大量的Python教程视频,适合不同水平的开发者学习和参考。

相关文章:

Python编程的黑暗魔法:模块与包的神秘力量!

哈喽,我是阿佑,今天给大家讲讲模块与包~ 文章目录 1. 引言1.1 模块化编程的意义1.2 Python中模块与包的概念概述 2. 背景介绍2.1 Python模块系统模块的定义与作用Python标准库简介 2.2 包的结构与目的包的定义与目录结构包在项目组织中的重要性 3. 创建与…...

python编程不良习惯纠正: 慎用顶层代码

这几天在跑一个开源代码时,发现,通过pdb断点不起作用,经过一番检查,发现代码运行时甚至没有进入main函数,就开始一顿操作. 然后定位到是在执行"import"操作的时候发生了冗余操作. 经过进一步的检查发现,是下…...

Simulate Ring Resonator in INTERCONNECT

Simulate Ring Resonator in INTERCONNECT 正文正文 首先,我们采用 Interconnect 模块的工作流程 一文中介绍的方法添加一个直波导器件。接着,我们需要对它的名称进行更改,此时我们看左侧 Property View - Root Element 中的 General 属性,我们发现 name 属性是灰色的,无…...

Flutter 中的 DrawerController 小部件:全面指南

Flutter 中的 DrawerController 小部件:全面指南 Flutter 是一个流行的跨平台移动应用开发框架,它提供了丰富的组件和工具来帮助开发者构建高质量的应用。在Flutter中,DrawerController并不是一个内置的组件,但是它的概念可以用于…...

Flutter 中的 ImageFiltered 小部件:全面指南

Flutter 中的 ImageFiltered 小部件:全面指南 在Flutter中,ImageFiltered是一个功能强大的小部件,它允许你对图片应用各种图像处理效果,如模糊、颜色转换、对比度调整等。通过ImageFiltered,你可以为应用添加丰富的视…...

C++第二十弹---深入理解STL中vector的使用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、vector的介绍 2、vector的使用 2.1、构造函数和赋值重载 2.1.1、构造函数的介绍 2.1.2、代码演示 2.2、容量操作 2.3、遍历 2.4、增删…...

【赠书第24期】Java项目开发实战(微视频版)

文章目录 前言 1 项目选择与需求分析 1.1 项目选择 1.2 需求分析 2 系统设计 2.1 系统架构设计 2.2 数据库设计 2.3 接口设计 3 编码实现 3.1 环境搭建 3.2 编码规范 3.3 编码实现 4 测试与部署 4.1 单元测试 4.2 系统测试 4.3 部署与上线 5 总结与展望 6 推…...

多波段光源 通过8种波长实现的成像解决方案

光源在机器视觉中的重要性不容小觑,它直接影响到图像的质量,进而影响整个系统的性能。光源的作用包括提供足够的照明,并确保被摄物体的特征能够被准确地捕捉到图像中,使被检测物体产生清晰的图像,提高图像的对比度和亮…...

【Python】 如何从日期中减去一天?

基本原理 在编程中,日期和时间的处理是一个常见的需求,尤其是在处理日志、调度任务、数据分析等场景中。Python 提供了多种方式来处理日期和时间,其中最常用的库是 datetime。datetime 模块包含了日期(date)、时间&am…...

【MySQL精通之路】SQL优化(1)-查询优化(10)-外部联接简化

主博客: 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 上一篇: 【MySQL精通之路】SQL优化(1)-查询优化(9)-外部联接优化-CSDN博客 下一篇: 【MySQL精通之路】SQL优化(1)-查询优化(11)-多范围查询优化-CSDN博客 查询时FROM子句中的表达…...

SCT2360:4V-28v Vin,6A同步降压DCDC转换器与EMI减少

特点: 宽4V-28V输入电压范围 0.6V14V输出电压范围 6A连续输出电流 HS/LS电源的集成式36m2/18m2 Rdson MOSFET 固定1 ms软启动时间 可选择的400KHz,800KHz,1.2MHz开关频率 可选择的PWM、PFM和USM操作模式 逐周期电流限制 输出过电压保护 超温保…...

企微运营SOP:构建高效、规范的运营流程

随着企业微信在企业内部沟通协作中的广泛应用,如何构建一套高效、规范的企微运营流程成为了众多企业关注的焦点。本文将详细探讨企微运营SOP(Standard Operating Procedure,标准操作程序)的重要性、构建方法以及实施效果&#xff…...

<商务世界>《76 微课堂<茶叶(2)-种类>》

1 茶叶总共分为6个大类 六大茶类分类法:红茶、绿茶、青茶、黄茶、黑茶、白茶六大茶类 2 红茶 红茶具有红茶、红汤、红叶和香甜味醇的特征。以水冲泡,不仅香气迎人,还呈现出特有的深红茶色,因此被人称为“红茶”。 分布地区&…...

安卓Bug总结

为什么写这篇文章 安卓十年开发遇到过得Bug做一个总结,大同小异,总结教训。 这里存放BUG目录列表 文章列表内容关键字Gradle常见问题及总结包括以下问题:gradle插件与gradle home版本关系错误、Gradle下载太慢、Executionfailed forJetifyTr…...

基于小波分析和机器学习(SVM,KNN,NB,MLP)的癫痫脑电图检测(MATLAB环境)

癫痫是一种由大脑神经元突发性异常放电导致的大脑功能性障碍疾病。据世界卫生组织统计,全球约有7000万人患有癫痫。癫痫患者在发病时呈现肌肉抽搐、呼吸困难、意识丧失等症状。由于癫痫发作的偶然性,患者极有可能在高空、驾驶、游泳等危险情况下发病并丧…...

python数据分析:爬取某东商城商品评论数据并做词云展示(含完整源码及详细注解)

python数据分析,爬取某东商城商品评论数据并做词云展示。 一、明确爬取的网页及结构 找到要爬取的网页地址,发现有一个获取json格式评论数据的接口: url = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=217…...

当HR问你是否单身时,该怎么回答?

知识星球(星球名:芯片制造与封测技术社区,星球号:63559049)里的学员问:我是晶圆厂厂务工程师,最近在面试新工作,但是几乎每家HR都会问我同一个问题:你结婚没有&#xff1…...

大数据开发面试题【Spark篇】

115、Spark的任务执行流程 driver和executor,结构式一主多从模式, driver:spark的驱动节点,用于执行spark任务中的main方法,负责实际代码的执行工作;主要负责:将代码逻辑转换为任务、在executo…...

深入分析 Android Activity (六)

文章目录 深入分析 Android Activity (六)1. Activity 的权限管理1.1 在 Manifest 文件中声明权限1.2 运行时请求权限1.3 处理权限请求结果1.4 处理权限的最佳实践 2. Activity 的数据传递2.1 使用 Intent 传递数据2.2 使用 Bundle 传递复杂数据 3. Activity 的动画和过渡效果3…...

火箭升空AR虚拟三维仿真演示满足客户的多样化场景需求

在航空工业的协同研发领域,航空AR工业装配系统公司凭借前沿的AR增强现实技术,正引领一场革新。通过将虚拟信息无缝融入实际环境中,我们为工程师、设计师和技术专家提供了前所未有的共享和审查三维模型的能力,极大地提升了研发效率…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...