一句话描述:
绝对引用是在sys.path中去找
相对引用是通过__name__去找。
假如目录如下:

绝对引用:

python a/aa.py的时候到底发生了什么
这个时候sys.path.append会将执行文件所在的目录即 a/ 放在sys.path中。后面所有文件的import都会在这个目录下找。如果aa是这样的。

from bb import i

那么很明显可以找到在a/目录下找到bb

但是假如你运行的是python main.py

import a.aa

那么现在加入到sys.path的就是顶层目录TEST,在aa.py里面就找不到bb了,这时候aa.py需改成
from a.bb import i
相对引用
相对引用是在__name__这个变量中找的。
举例,如果aa.py改成如下:

print(__name__)
from .bb import i

我们运行python main.py
那么aa.py的__name__此时就是a.aa
这时候aa.py中如果使用相对引用.bb,就会找到__name__倒数第一个.之前的目录a,然后在系统路径中去找这个a,如果能找到就可以导入,找不到就不能导入。很显然目前的系统路径可以找到a

如果我们运行python a/aa.py,情况会怎么样呢
此时__name 的值为__main
很显然这时候如果使用相对引用,根本找不到.,也就是根本知道parent目录是谁,因此会报错

ImportError: attempted relative import with no known parent package

接下来假如cc.py

print(__name__)
from ..a.bb import i

此时 main.py里面导入cc

import a.aa
import c.cc

那么很明显cc.py的__name__是c.cc,然后导入相对引用的时候用了两个., 也就是说需要在__name__中向上寻找两个点,但是现在__name__只有一个.,因此这个时候会报:

ValueError: attempted relative import beyond top-level package

python import相对引用和绝对引用相关推荐

  1. python变量回收_Python变量的引用、拷贝和回收机制

    1.Python中变量的引用 Python中的变量都是指针,都是某个内存对象的引用. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用" ...

  2. c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用

    1. 引言 引用在各种编程语言中都有涉及,如java中值传递和引用传递.python的对象引用也是学习python过程中需要特别关注的一个知识点,特别是对函数参数传递,可能会引起不必要的BUG.本文将 ...

  3. python中引用计数_Python引用计数操作示例

    本文实例讲述了Python引用计数操作.分享给大家供大家参考,具体如下: 为了简化内存管理,Python通过引用计数机制实现了自动的垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对 ...

  4. python 引用计数 循环引用_Python对象的循环引用问题

    Python对象循环引用 我们来介绍一下 Python 是采用何种途径解决循环引用问题的. 循环引用垃圾回收算法 上图中,表示的是对象之间的引用关系,从自对象指向他对象的引用用黑色箭头表示.每个对象里 ...

  5. Python的垃圾回收机制(引用计数+标记清除+分代回收)

    一.写在前面: 我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念.在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyOb ...

  6. 求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库

    求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库 本来一直是使用idel的,之前安装了一些第三方库现在也可以使用, 但是在安装了anaconda之后,自动安装了很 ...

  7. python一个对象只能被一个变量引用吗_python中的对象、变量、引用的问题

    对象.变量.引用 对象 对象包括 不可变对象 和 可变对象.但从某种意义上来说,可变和不可变并不是对立关系. int,string,float,tuple 这四类属于 不可变对象.这里不可变的含义是: ...

  8. python赋值中文变量_Python变量引用赋值

    不,你不能.正如其他答案所指出的,你可以(ab?)使用可变对象的别名来实现类似的效果.然而,这与C++引用不一样,我想解释一下实际上发生了什么,以避免任何误解.<>你可以看到,在C++(和 ...

  9. python中的值传递和引用传递

    今天和大家分享python中很重要的一个知识点:参数传递,其中包括值传递和引用传递. 目录 一.为什么要熟悉值传递和引用传递 1.1 值传递 1.2 引用传递 二.Python变量及其赋值 三.Pyt ...

  10. 【python】对象释放,弱引用weaker.ref

    class A:def __del__(self):print("in__del__")>>> a = A() >>> a = None in_ ...

最新文章

  1. 2021-2027年中国智能门禁系统市场研究及前瞻分析报告
  2. bzoj 2375: 疯狂的涂色
  3. docker 与tomcat整合
  4. Vulkan Video实现GPU加速视频编码/解码
  5. C/C++中手动获取调用堆栈【转】
  6. 【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介
  7. Linux: Nginx 安装
  8. NumPy数值计算库-1
  9. UML设计(团队作业)
  10. UHDTV (超高清电视)的色域与取样精度及格式
  11. 计算机毕业设计Java宠物医院管理系统(源码+系统+mysql数据库+lw文档)
  12. VBScript教程之一(Hello VBScriopt)
  13. 虚拟机桌面图标开机位置错乱的解决方法
  14. 1、Apache启动失败,请检查相关配置。2、MySQL5.1启动失败,请检查相关配置。
  15. 记录我在华为的经历----阿冬专栏
  16. 数模混合监控,视频如何联动报警、消防、门禁?
  17. 中电药明招募资深Python开发工程师
  18. 基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
  19. 20172304 《程序设计与数据结构》 第二周学习总结
  20. GeckoDriver 国内镜像源加速下载

热门文章

  1. 酷狗社招面试 java_酷狗面试经验
  2. 高级软件工程师(面试题)
  3. 旧版python卸载后py和pyc文件关联修复笔记
  4. dnf过年服务器维护否,DNF服务器或发生重大漏洞,玩家:维护这么慢,这些BUG修复了吗?...
  5. 特斯拉又双叒产量不足,下一个特斯拉还有多远?
  6. 求幂级数的收敛域及和函数手写笔记
  7. JAVA-S7协议连接PLC工具类
  8. 安卓开发——在应用中简单调用Android百度地图API SDK
  9. Mysql-事务篇(1)
  10. 杰理之在anc模式下手机断开蓝牙耳机会有噗噗声问题【篇】