当前位置: 首页 > 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 会在虚拟机之间创建多个关联的…...

数学学习者的终极指南:如何高效利用开源资源库构建完整知识体系

数学学习者的终极指南&#xff1a;如何高效利用开源资源库构建完整知识体系 【免费下载链接】awesome-math A curated list of awesome mathematics resources 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-math 在数字化学习时代&#xff0c;如何从海量的…...

基于ROS的语音控制机器人(一):从零搭建多模态交互系统

1. 从零搭建ROS语音控制机器人的核心思路 第一次接触ROS机器人开发时&#xff0c;我被其分布式架构深深吸引。想象一下&#xff1a;你对着电脑说"前进"&#xff0c;树莓派就能驱动小车移动&#xff1b;喊"打开摄像头"&#xff0c;机器人立即开启视觉识别—…...

如何构建现代搜索应用:ReactiveSearch与GraphQL的终极集成指南

如何构建现代搜索应用&#xff1a;ReactiveSearch与GraphQL的终极集成指南 【免费下载链接】reactivesearch Search UI components for React and Vue 项目地址: https://gitcode.com/gh_mirrors/re/reactivesearch ReactiveSearch是一个强大的React和Vue搜索UI组件库&a…...

Node.js后端集成GTE-Base-ZH:构建语义化API服务实战

Node.js后端集成GTE-Base-ZH&#xff1a;构建语义化API服务实战 最近在做一个智能文档检索项目&#xff0c;需要处理大量中文文本的语义相似度计算。一开始尝试用传统的TF-IDF&#xff0c;效果总是不尽如人意&#xff0c;直到接触到了GTE-Base-ZH这个专门针对中文优化的文本嵌…...

UnityXR实战:用Pico实现物体抓取与场景重置(含材质交互技巧)

UnityXR实战&#xff1a;用Pico实现物体抓取与场景重置&#xff08;含材质交互技巧&#xff09; 在虚拟现实开发领域&#xff0c;交互体验的质量往往决定了产品的成败。Pico作为国内领先的VR设备&#xff0c;结合UnityXR框架&#xff0c;为开发者提供了强大的工具链来实现沉浸式…...

告别COLMAP预处理:3D高斯溅射的零配置新体验

告别COLMAP预处理&#xff1a;3D高斯溅射的零配置新体验 【免费下载链接】CF-3DGS 项目地址: https://gitcode.com/gh_mirrors/cf/CF-3DGS 想象一下&#xff0c;你刚刚拍摄了一组精美的场景照片&#xff0c;想要快速生成3D模型&#xff0c;却发现需要先运行复杂的COLMA…...

国际首都公报:湖北省放飞炬人国际控股集团国际总裁方达炬批准《湖北省放飞炬人国际控股集团国际军务涉军事法院规章》施行

国际首都公报&#xff1a;湖北省放飞炬人国际控股集团国际总裁方达炬批准《湖北省放飞炬人国际控股集团国际军务涉军事法院规章》施行...

树莓派+SocketCAN实战:手把手教你用CanFestival控制伺服电机(附完整配置文件)

树莓派SocketCAN实战&#xff1a;手把手教你用CanFestival控制伺服电机&#xff08;附完整配置文件&#xff09; 在工业自动化和机器人控制领域&#xff0c;CANopen协议因其高可靠性和实时性成为伺服电机控制的首选方案。本文将带你用树莓派这一低成本硬件平台&#xff0c;结合…...

LiuJuan Z-Image Generator真实案例:为独立音乐人生成专辑封面人像全流程

LiuJuan Z-Image Generator真实案例&#xff1a;为独立音乐人生成专辑封面人像全流程 最近&#xff0c;一位独立音乐人朋友找到我&#xff0c;说他想为自己的新专辑设计一个封面。预算有限&#xff0c;请不起专业画师&#xff0c;但又不想要那些千篇一律的模板。他想要一张能体…...

CentOS8网络管理大变革:从network.service到NetworkManager的全面解析

CentOS8网络管理架构深度解析&#xff1a;从传统命令到NetworkManager的进化之路 如果你是一位长期使用CentOS的系统管理员&#xff0c;最近升级到CentOS8后可能会遇到一个令人困惑的问题&#xff1a;当你习惯性地输入systemctl restart network命令时&#xff0c;系统却无情地…...