Python中的绝对和相对导入
在本文中,我们将看到Python中的绝对和相对导入。
Python中导入的工作
Python中的import类似于C/C++中的#include header_file。Python模块可以通过使用import导入文件/函数来访问其他模块的代码。import语句是调用import机制的最常见方式,但它不是唯一的方式。
import语句涉及两个操作,它搜索模块,并将搜索结果绑定到本地作用域中的名称。当导入模块时,Python会运行模块文件中的所有代码,并使其可用于导入器文件。当一个模块被导入时,解释器首先在sys.modules中搜索它,sys. modules是所有先前导入的模块。如果没有找到它,那么它将搜索所有具有该名称的内置模块,如果找到它,那么解释器将运行所有代码并使其对文件可用。如果找不到模块,它将在变量sys. path给出的目录列表中搜索同名文件。path是一个变量,包含一个路径列表,其中包含python库、包和包含输入脚本的目录。
例如,导入一个名为math的模块,然后解释器在内置模块中搜索它,如果没有找到,则在sys. path给出的目录列表中搜索名为math.py的文件。
import math
print(math.pi)
import语句的语法
用户可以导入包和模块。注意导入一个包实际上是将包的__init__.py文件作为一个模块导入。用户还可以从包或模块导入特定对象。通常有两种类型的导入语法。当您使用第一个时,您直接导入资源。
import gxg
gxg可以是封装或模块。当用户使用第二种语法时,则用户从另一个包或模块导入资源。
from gxg import geek
geek可以是模块、子包或对象,例如类或函数。
导入语句的样式
PEP 8是python的官方风格指南,它有一套规则来指导如何制定python代码以最大限度地提高其可读性。对于编写import语句,有以下几点:
- 导入应该总是写在文件的顶部,就在任何模块注释和文档字符串之后。
- 导入通常应该用空格分隔。
- 导入应按以下顺序分组。
标准库导入(Python的内置模块)
相关第三方库
本地应用程序/库特定导入
import math
import os# Third party imports
from flask import Flask
from flask_restful import Api
from flask_sqlalchemy import SQLAlchemy# Local application imports
from local_module import local_class
from local_package import local_function
Python中的绝对导入vs相对导入
绝对导入涉及完整路径,即,从项目的根文件夹复制到所需的模块。绝对导入状态,即资源将使用其完整路径从项目的根文件夹导入。
语法和实例:
让我们看看下面的目录结构:

这里有一个名为project的目录,下面有两个子目录,即pkg1、pkg2。pkg1有两个模块,module1和module2。pkg2包含三个模块,module3、module4、init.py,以及一个子包名subpkg1,其中包含module5.py。让我们假设以下情况:
- pkg 1/module1.py包含一个函数fun 1
- pkg 2/module3.py包含一个函数fun 2
- pkg 2/subpkg 1/module5.py包含一个函数fun 3
# importing a fun1 from pkg1/module1
from pkg1.import module1 import fun1from pkg1 import module2# importing a fun2 from pkg2/module3
from pkg2 import module3 import fun2# importing a fun3 from pkg2/subpkg1/module5
from pkg2.subpkg1.module5 import fun3
绝对导入的优点和缺点
优点:
- 绝对导入非常有用,因为它们是明确和直接的。
- 绝对导入很容易从导入的资源的位置准确地判断出来,只需查看语句即可。
- 即使import语句的当前位置发生更改,绝对导入仍保持有效。
缺点:
如果目录结构非常大,则使用绝对导入没有意义。在这种情况下,使用相对导入效果很好。
from pkg1.subpkg2.subpkg3.subpkg4.module5 import fun6
Python中的相对导入
相对导入指定从其当前位置导入的对象或模块,该位置是import语句驻留的位置。有两种类型的相对导入:
- 隐式相对导入-Python(3.x)中不允许隐式相对导入。
- 显式相对导入-显式相对导入已经在Python(3.x)中获得批准。
语法和实例:
相对导入的语法取决于当前位置以及要导入的模块或对象的位置。相对导入使用点(.)符号来指定位置。一个点表示模块在当前目录中,两个点表示模块在当前位置的父目录中,三个点表示模块在祖目录中,依此类推。让我们看看下面的目录结构:

让我们假设以下情况:
- pkg 1/module1.py包含一个函数fun 1
- pkg 2/module3.py包含一个函数fun 2
- pkg 2/subpkg 1/module5.py包含一个函数fun 3
# importing fun1 into pkg1/module1.py
from .module1 import fun1# importing fun2 and fun3 into pkg2/module3.py
from .module3 import fun2
from .subpackage1.module5 import fun3
相对导入的优点和缺点
优点:
- 使用相对导入简洁明了。
- 基于当前位置,它降低了import语句的复杂性。
缺点:
- 相对导入不像绝对导入那样易读。
- 使用相对导入并不容易,因为很难告诉模块的位置。
相关文章:
Python中的绝对和相对导入
在本文中,我们将看到Python中的绝对和相对导入。 Python中导入的工作 Python中的import类似于C/C中的#include header_file。Python模块可以通过使用import导入文件/函数来访问其他模块的代码。import语句是调用import机制的最常见方式,但它不是唯一的…...
C语言关于与运算符
C语言关于&与&&运算符 我们知道,在很多场景中&和&&通常可以相互代替,那么它们到底有什么不同呢? 先看一段代码 bool a, b, c; c a & b;使用clang -S编译出来的指令如下: movb -5(%rbp), %al …...
计算机网络(速率、宽带、吞吐量、时延、发送时延)
速率: 最重要的一个性能指标。 指的是数据的传送速率,也称为数据率 (data rate) 或比特率 (bit rate)。 单位:bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…...
kubectl入门
一.kubectl的三种资源管理方式: 二. kubectl资源介绍: 1.namespace:实现多套环境的资源隔离或者多租户的资源隔离。k8s中的pod默认可以相互访问,如果不想让两个pod之间相互访问,就将其划分到不同ns下。 2.podÿ…...
Android JNI系列详解之ndk-build工具的使用
一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用,今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式: 如上图所示,第一种方式是Android.mkApplication.mkgradle的方式生成…...
【业务功能篇90】微服务-springcloud-检索服务-ElasticSearch实战运用-DSL语句
商城检索服务 1.检索页面的搭建 商品检索页面我们放在search服务中处理,首页我们需要在mall-search服务中支持Thymeleaf。添加对应的依赖 <!-- 添加Thymeleaf的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifa…...
QTday4
实现闹钟功能 1》 头文件 #ifndef BURGER_H #define BURGER_H#include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QTextEdit> #include <QTimerEvent> //定时器事件类 #include <QDateTim…...
设计模式之命令模式(Command)的C++实现
1、命令模式的提出 在软件开发过程中,“行为请求者”和“行为实现者”通常呈现一种“紧耦合”,如果行为的实现经常变化,则不利于代码的维护。命令模式可以将行为的请求者和行为的实现者进行解耦。具体流程是将行为请求者封装成一个对象&…...
取证工具prodiscover的基本操作
前言提醒 取证工具ProDiscover在网上讲解操作的文章实在太少,一是prodiscover是用于磁盘取证的工具,本身比较小众比不上其他的编程软件能用到的地方多,二是这个工具是用来恢复提取磁盘中被删除的文件,是比较隐晦的软件。 需要注…...
flutter plugins插件【二】【FlutterAssetsGenerator】
2、FlutterAssetsGenerator 介绍地址:https://juejin.cn/post/6898542896274735117 配置assets目录 插件会从pubspec.yaml文件下读取assets目录,因此要使用本插件,你需要在pubspec.yaml下配置资源目录 flutter:# The following line ens…...
看懂UML类图
UML 统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。 类的表示 首先看那个…...
keras深度学习框架通过简单神经网络实现手写数字识别
背景 keras深度学习框架,并不是一个独立的深度学习框架,它后台依赖tensorflow或者theano。大部分开发者应该使用的是tensorflow。keras可以很方便的像搭积木一样根据模型搭出我们需要的神经网络,然后进行编译,训练,测试…...
React 中的 ref 如何操作 dom节点,使输入框获取焦点
聚焦文字输入框 .focus() 获取焦点 当用户点击按钮时,handleClick 函数会被调用,从而将焦点聚焦到文本输入框上。 // 焦文字输入框 import { useRef } from "react";const FocusForm () > {const inputRef useRef<any>(null);func…...
最短路Dijkstra,spfa,图论二分图算法AYIT---ACM训练(模板版)
文章目录 前言A - Dijkstra Algorithm0x00 算法题目0x01 算法思路0x02 代码实现 B - 最长路0x00 算法题目0x01 算法思路0x02 代码实现 C - 二分图最大匹配0x00 算法题目0x01 算法思路0x02 代码实现 D - 搭配飞行员0x00 算法题目0x01 算法思路0x02 代码实现 E - The Perfect Sta…...
AK 微众银行 9.3 笔试 Java后端方向
T1(模拟,二分) (没看清买的糖果只有前缀,一开始用二分写了,后来意识到也没改了,简单写的话,直接模拟就好了) #include <bits/stdc.h>#define endl \nusing namespace std;const int N 50010;int n; int a[N];bool check(…...
了解java中的通配符“?“
目录 通配符的作用 先看一段代码 用通配符"?"后,代码变化 结论 通配符上界 通配符下界 对通配符上下界的注释理解及其练习代码 简记: ? 用于在泛型的使用,即为通配符. 在Java中,通配符(wildcard)主要用于泛型…...
浙大陈越何钦铭数据结构07-图6 旅游规划【最小堆实现】
题目: 题目和浙大陈越何钦铭数据结构07-图6 旅游规划是一样的,不同的是用最小堆实现函数【FindMinDist】。 时间复杂度对比: 浙大陈越何钦铭数据结构07-图6 旅游规划: 创建图(CreateGraph):时…...
OpenShift 4 - 用 Prometheus 和 Grafana 监视用户应用定制的观测指标(视频)
《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.13 的环境中验证 文章目录 OpenShift 的监控功能构成部署被监控应用用 OpenShift 内置功能监控应用用 Grafana 监控应用安装 Grafana 运行环境配置 Grafana 数据源定制监控 Dashboard 演示视…...
【LeetCode】剑指 Offer <二刷>(3)
目录 题目:剑指 Offer 06. 从尾到头打印链表 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 07. 重建二叉树 - 力扣…...
Ceph IO流程及数据分布
1. Ceph IO流程及数据分布 1.1 正常IO流程图 步骤: client 创建cluster handler。client 读取配置文件。client 连接上monitor,获取集群map信息。client 读写io 根据crshmap 算法请求对应的主osd数据节点。主osd数据节点同时写入另外两个副本节点数据。…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
