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

深入了解 Python 的 import 语句

在 Python 中,import 语句是一个关键的功能,用于在程序中引入模块和包。本文将深入讨论 import 语句的各种用法、注意事项以及一些高级技巧,以帮助你更好地理解和使用这一功能。

概念介绍

package

通常对应一个文件夹,下面可以有subpackagemodule,通常有__init__.py(,python3以下版本一定有,python3中不一定)

如果__init__.py存在,package导入时,会先执行一次__init__.py

module

通常对应一个 .py 文件

基本用法

引入整个模块

最简单的 import 用法是引入整个模块:

import module_name

这样,你就可以使用 module_name 中定义的函数、类等。例如:

module_name.function_name()

给模块取别名

有时候,模块的名称可能较长,为了方便使用,可以为模块取一个别名:

import module_name as alias

这样,可以用 alias 代替 module_name

alias.function_name()

示例

import module1 as m1
import package1.module1 as m1
from package1.module1 import object1 as o1

导入module1重命名为m1
从package1导入module1重命名为m1
从package1导入module1的object1命名为o1

仅引入模块的某些内容

如果你只需要使用模块中的某些函数或类,可以通过 from ... import ... 语句:

from module_name import function_name

现在,你可以直接使用 function_name() 而不用写模块名。

示例

from module1 import object1

从module1导入对象object1

导入包

如果你的代码组织成了包,你也可以使用 import 来导入包和包中的模块。

import package_name

或者:

from package_name import module_name

导入自定义模块

在导入自己写的模块时,确保模块所在的目录在 Python 解释器的搜索路径中。你可以通过以下方法之一来实现:

  • 将模块所在的目录添加到 sys.path 中。
  • 设置 PYTHONPATH 环境变量。

动态导入

有时候,你可能需要在运行时动态地导入模块。可以使用 importlib 模块来实现:

import importlib
module = importlib.import_module('module_name')

导入所有内容

虽然不推荐,但有时候你可能想导入模块中的所有内容。可以使用 from ... import *

from module_name import *

这样做可能导致命名空间污染,不利于代码的维护和可读性。

relative import

在Python中,相对导入使用的是点号 . 来表示相对路径。

加粗样式

同目录下导入

如果 main.py 想要导入 main2.py,可以使用相对路径 . 表示同一级目录。

假设你的目录结构如下:

D:
│  main.py
│  main2.py
├─p1
│  │  m1 - 副本.py
│  │  m1.py
│  │
│  └─p11
│        m11.py
│
└─p2m2 - 副本.pym2.py

main.py 中,你可以使用以下方式导入 main2.py

# main.py# 从同一级目录中导入main2模块
from . import main2# 使用main2模块中的功能
main2.some_function()

上级目录下导入

如果 m2.py 想要导入 main.py,可以使用相对路径 .. 表示上一级目录。

假设你的目录结构如下:

D:
│  main.py
│  main2.py
├─p1
│  │  m1 - 副本.py
│  │  m1.py
│  │
│  └─p11
│        m11.py
│
└─p2m2 - 副本.pym2.py

m2.py 中,你可以使用以下方式导入 main.py

# m2.py# 从同上级目录中导入main模块
from .. import main# 使用main模块中的功能
main.some_function()

软件包导入

如果 m11.py 想要导入 main.py,这个时候以及越了2级,不再支持相对路径,这个时候就要使用软件包导入。

假设你的目录结构如下:

D:
│  __init__.py
│  main.py
│  main2.py
├─p1
│  │  m1 - 副本.py
│  │  m1.py
│  │
│  └─p11
│        m11.py
│
└─p2m2 - 副本.pym2.py

main.py的同目录下添加__init__.py设置为软件包,这个时候,该目录被添加到子文件的环境变量里

m11.py 中,你可以使用以下方式导入 main.py

# m2.py# 通过软件包导入main模块
import main# 使用main模块中的功能
main.some_function()

结语

熟练使用 import,可以帮助你更好地组织和管理你的 Python 项目。你可以将代码模块化、组织成包,实现更好的代码复用和可维护性。希望本文对你深入了解和使用 import 语句提供了帮助。

相关文章:

深入了解 Python 的 import 语句

在 Python 中,import 语句是一个关键的功能,用于在程序中引入模块和包。本文将深入讨论 import 语句的各种用法、注意事项以及一些高级技巧,以帮助你更好地理解和使用这一功能。 概念介绍 package 通常对应一个文件夹,下面可以有…...

接口测试 — 11.logging日志模块处理流程

1、概括理解 了解了四大组件的基本定义之后,我们通过图示的方式来理解下信息的传递过程: 也就是获取的日志信息,进入到Logger日志器中,传递给处理器确定要输出到哪里,然后进行过滤器筛选,通过后再按照定义…...

Hago 的 Spark on ACK 实践

作者:华相 Hago 于 2018 年 4 月上线,是欢聚集团旗下的一款多人互动社交明星产品。Hago 融合优质的匹配能力和多样化的垂类场景,提供互动游戏、多人语音、视频直播、 3D 虚拟形象互动等多种社交玩法,致力于为用户打造高效、多样、…...

mac传输文件到windows

前言 由于mac系统与windows系统文件格式不同,通过U盘进行文件拷贝时,导致无法拷贝。官方解决方案如下,但是描述的比较模糊。看我的操作步骤即可。 https://support.apple.com/zh-cn/guide/mac-help/mchlp1657/12.0/mac/12.6 前提条件 mac与…...

trtc-electron-sdk的demo中添加更新功能以及出现的报错问题

1、官网demo下载地址 点击下载 按照官网demo说明文档进行安装和运行 2、添加electron-updater npm install electron-updater根据项目需求安装对应的版本,建议使用5.2.1 3、创建一个handleUpdater.js文件,和package.json同级 // const { ipcMain } …...

什么是流量攻击? 流量攻击怎么处理?

由于DDoS攻击往往采取合法的数据请求技术,再加上傀儡机器,造成DDoS攻击成为最难防御的网络攻击之一。据美国最新的安全损失调查报告,DDoS攻击所造成的经济损失已经跃居第一。 传统的网络设备和周边安全技术,例如防火墙和IDSs(Intr…...

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS(通用配置)3.4.2 SCHEDULING&#xff0…...

5 分钟内搭建一个免费问答机器人:Milvus + LangChain

搭建一个好用、便宜又准确的问答机器人需要多长时间? 答案是 5 分钟。只需借助开源的 RAG 技术栈、LangChain 以及好用的向量数据库 Milvus。必须要强调的是,该问答机器人的成本很低,因为我们在召回、评估和开发迭代的过程中不需要调用大语言…...

WPF Border

在 WPF 中&#xff0c;Border 是一种常用的控件&#xff0c;用于给其他控件提供边框和背景效果。 要使用 Border 控件&#xff0c;您可以在 XAML 代码中添加以下代码&#xff1a; <Border BorderBrush"Black" BorderThickness"2" Background"Lig…...

基于博弈树的开源五子棋AI教程[4 静态棋盘评估]

引子 静态棋盘的评估是棋力的一个很重要的体现&#xff0c;一个优秀的基于博弈树搜索的AI往往有上千行工作量&#xff0c;本文没有做深入讨论&#xff0c;仅仅写了个引子用来抛砖引玉。 评估一般从两个角度入手&#xff0c;一个是子力&#xff0c;另一个是局势。 1 评估维度 …...

STL--排序与检索

题目 现有N个大理石&#xff0c;每个大理石上写了一个非负整数。首先把各数从小到大排序&#xff0c;然后回答Q个问题。每个问题是否有一个大理石写着某个整数x,如果是&#xff0c;还要回答哪个大理石写着x。排序后的大理石从左到右编写为1-N。&#xff08;样例中&#xff0c;…...

大数据处理与分析-Spark

导论 (基于Hadoop的MapReduce的优缺点&#xff09; MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架 MapReduce是一种用于处理大规模数据集的编程模型和计算框架。它将数据处理过程分为两个主要阶段&#xff1a;Map阶…...

虚拟机的下载、安装(模拟出服务器)

下载 vmware workstation&#xff08;收费的虚拟机&#xff09; 下载vbox 网址&#xff1a;Oracle VM VirtualBox&#xff08;免费的虚拟机&#xff09; 以下选择一个下载即可&#xff0c;建议下载vbox&#xff0c;因为是免费的。安装的时候默认下一步即可&#xff08;路径最好…...

K8S Pod Terminating/Unknown故障排查

一、pod异常出现现象 优雅终止周期(Graceful termination period): 当pod被删除时&#xff0c;会进入"Terminating"状态&#xff0c;等待容器优雅关闭。如果容器关闭所需时间超过默认期限(默认30秒)&#xff0c;则pod将保持在"Terminating"状态。 Finalize…...

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式&#xff08;可处理目标框和实例分割&#xff09;的代码&#xff0c;以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址&#xff0c;提供了源代码&#xff0c;以及相关使用方…...

MySQL报错:1366 - Incorrect integer value: ‘xx‘ for column ‘xx‘ at row 1的解决方法

我在插入表数据时遇到了1366报错&#xff0c;报错内容&#xff1a;1366 - Incorrect integer value: Cindy for column name at row 1&#xff0c;下面我演示解决方法。 根据上图&#xff0c;原因是Cindy’对应的name字段数据类型不正确。我们在左侧找到该字段所在的grade_6表&…...

MySQL中MVCC的流程

参考文章一 参考文章二 当谈到数据库的并发控制时&#xff0c;多版本并发控制&#xff08;MVCC&#xff09;是一个重要的概念。MVCC 是一种用于实现数据库事务隔离性的技术&#xff0c;常见于像 PostgreSQL 和 Oracle 这样的数据库系统中。 MVCC 的核心思想是为每个数据行维护…...

朴素贝叶斯法_naive_Bayes

朴素贝叶斯法&#xff08;naive Bayes&#xff09;是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征条件独立假设学习输入输出的联合概率分布&#xff1b;然后基于此模型&#xff0c;对给定的输入 x x x&#xff0c;利用贝叶斯定理…...

Windows下安装MongoDB实践总结

本文记录Windows环境下的MongoDB安装与使用总结。 【1】官网下载 官网下载地址&#xff1a;Download MongoDB Community Server | MongoDB 这里可以选择下载zip或者msi&#xff0c;zip是解压后自己配置&#xff0c;msi是傻瓜式一键安装。这里我们分别对比进行实践。 【2】ZI…...

华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识 1.vNIC ​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC&#xff0c;每个 NIC 可以是多个 vNIC 的基础。 ​ 将 vNIC 附加到虚拟机时&#xff0c;Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的…...

告别轮询!用STM32F407的USART3+DMA+空闲中断实现高效串口数据接收

STM32F407高效串口通信&#xff1a;USART3DMA空闲中断实战指南 在嵌入式开发中&#xff0c;串口通信是最基础也最常用的外设之一。传统的中断接收方式虽然简单&#xff0c;但在高速或大数据量传输时&#xff0c;频繁的中断响应会显著增加CPU负担&#xff0c;甚至导致数据丢失。…...

像素剧本圣殿部署指南:Qwen2.5-14B-Instruct在生产环境中稳定运行的GPU显存优化技巧

像素剧本圣殿部署指南&#xff1a;Qwen2.5-14B-Instruct在生产环境中稳定运行的GPU显存优化技巧 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。它将先进的AI推理能力与独特的8-Bit…...

基于Redis的4种延时队列实现方式及实战

什么是延时队列? 延时队列顾名思义,是指元素进入队列后,可以延时一定时间再被消费者取出执行。这与普通队列的区别在于,普通队列中的元素一旦入队就可以被立即消费,而延时队列中的元素需要等到指定时间后才能被消费。 为什么要使用Redis实现延时队列? 使用Redis实现延…...

【读书笔记】《在远远的背后带领》

《在远远的背后带领》书话整理书名由来 "在远远的背后带领"这个书名&#xff0c;源于作者对十余年养育实践的回顾与思考。她发现&#xff0c;父母养育孩子容易走两个极端&#xff1a; 过度控制&#xff1a;强迫孩子按照自己的想法行事&#xff0c;结果双方俱疲&#…...

AI赋能:让快马平台解析21届智能车赛规则并生成智能算法代码

最近在准备21届智能车比赛时&#xff0c;发现今年的赛道规则特别复杂&#xff0c;各种新加入的元素和评分标准让人有点头大。正好尝试用InsCode(快马)平台的AI辅助开发功能来帮忙解析规则并生成算法代码&#xff0c;整个过程意外地顺利&#xff0c;分享下具体实现思路。 规则文…...

【Matlab】MATLAB教程:图形句柄;案例:h=plot(x,y);应用:控制图形属性

MATLAB教程:图形句柄;案例:h=plot(x,y);应用:控制图形属性 在MATLAB数据可视化、实验报告绘图、工程结果展示等场景中,仅仅通过plot函数绘制基础图形远远不够。实际科研与工程应用中,往往需要精准调整图形的线条样式、颜色、标记点、坐标轴、图例等属性,让图形更清晰、…...

OpenRocket终极指南:专业火箭设计与飞行仿真软件完全解析

OpenRocket终极指南&#xff1a;专业火箭设计与飞行仿真软件完全解析 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket OpenRocket是一款功能强大的开源火箭…...

手把手教你用PyTorch 2.0复现风源AI气象模型(附GitHub源码解读)

手把手教你用PyTorch 2.0复现风源AI气象模型&#xff08;附GitHub源码解读&#xff09; 气象预测正经历从传统数值模拟到AI驱动的范式转移。本文将带您深入风源模型的技术内核——一个融合卫星遥感与深度学习的混合架构&#xff0c;通过PyTorch 2.0实现从数据预处理到模型推理的…...

告别重复造轮子:用快马ai一键生成arm7标准外设驱动,效率提升50%

作为一名嵌入式开发者&#xff0c;我经常需要和ARM7这类微控制器打交道。每次新项目启动&#xff0c;最头疼的就是那些重复性的外设驱动编写工作——尤其是定时器中断这种基础功能&#xff0c;虽然逻辑简单&#xff0c;但写起来特别耗时。最近发现InsCode(快马)平台的AI生成功能…...

AI头像生成器实战:用Qwen3-32B为你的社交头像设计专属描述文案

AI头像生成器实战&#xff1a;用Qwen3-32B为你的社交头像设计专属描述文案 1. 为什么你需要一个AI头像生成器 在社交媒体时代&#xff0c;一个独特的头像已经成为个人品牌的重要组成部分。无论是LinkedIn上的专业形象&#xff0c;还是Instagram上的创意展示&#xff0c;头像都…...