Python中的绝对导入和相对导入,解决了我很多困惑,区别在这里!_python 导入没有相对概念

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这在脚本内将导入的资源abc重命名为other_name。它现在必须被引用为other_name,否则它将不被识别。

导入语句的风格

Python的官方风格指南——PEP 8,在编写导入语句时有几个忠告。总结如下:

  1. 导入总是位于文件的顶部,在任何模块注释和文档字符串之后。

  2. 导入应该根据导入情况来划分。通常有三类:

  • 标准库导入(Python的内置模块)
  • 相关第三方导入(已安装且不属于当前应用程序的模块)
  • 本地应用程序导入(属于当前应用程序的模块)
  1. 每一组导入应该被空行隔开。

在每个导入组中按字母顺序排列导入也是一个好主意。这使得查找特定的导入更加容易,尤其是当文件中有许多导入时。

下面是如何设计导入语句的示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的导入语句被划分为三个不同的组,由空行分隔。它们也按字母顺序排列在每组中。

绝对导入

你已经掌握了如何编写import语句以及如何像专业人士那样设置样式。现在是时候了解更多关于绝对导入的信息了。绝对导入从项目根文件夹中使用其完整路径导入指定的资源。

语法与实例

假设你有以下目录结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有一个project目录,包含两个子目录,package1和package2。package1目录有两个文件,module1.py和module2.py。

package2目录有三个文件:两个模块:module3.py和module4.py,以及初始化文件__init__.py。它还包含一个目录subpackage1,subpackage1又包含一个文件module5.py。

假设如下:

1.package1/module2.py包含一个函数function1。

2.package2/__init__.py包含一个类class1.

3.package2/subpackage1/module5.py包含一个函数function2.

以下是绝对导入的实际例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,必须从顶级包文件夹中为每个包或文件提供详细路径。这有点类似于它的文件路径,但是我们使用点(.)代替斜杠(/)。

绝对导入的利弊

绝对导入是首选,因为它们非常明确和直接。仅仅通过查看语句就可以很容易地确定导入资源的位置。此外,即使导入语句的当前位置发生更改,绝对导入仍然有效。事实上,PEP 8明确建议绝对导入。

然而,有时,绝对导入会变得相当冗长,这取决于目录结构的复杂性。想象一下有这样的语句:from package1.subpackage2.subpackage3.subpackage4.module5 import function6 那太荒谬了,对吧?幸运的是,在这种情况下,相对导入是一个很好的选择!

相对导入

相对导入指定资源相对于当前位置导入,即导入语句所在的位置。相对导入有两种类型:隐式和显式。隐式相对导入在Python 3中已经被弃用,所以我不会在这里涉及它们。

语法与实例

相对导入的语法取决于当前位置以及要导入的模块、包或对象的位置。下面是一些相对导入的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以看到上面每个导入语句中至少有一个点。相对导入使用点标记来指定位置。

一个点意味着引用的模块或包位于与当前位置相同的目录中。两个点意味着它在当前位置的父目录中,也就是上层的目录。三个点意味着它在祖父母目录中,等等。如果你使用类似UNIX的操作系统,可能对此很熟悉!

假设你拥有与以前相同的目录结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

回忆文件内容:

1.package1/module2.py包含一个函数function1。

2.package2/__init__.py包含一个类class1.

3.package2/subpackage1/module5.py包含一个函数function2.

你可以通过这种方式将function1导入package1/module1.py中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里只使用一个点,因为module2.py位于与当前模块相同的目录中,当前模块是module1.py。

你可以将class1 和function2 以这种方式导入package2/module3.py文件中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在第一个导入语句中,一个点表示你正在从当前包导入class1。别忘了,导入一个包基本上是导入包的__init__.py文件作为模块。在第二个导入语句中,你将再次使用一个点,因为subpackage1 与当前模块module3.py位于同一个目录中。

相对导入的利弊

相对导入的一个明显优势是它们相当简练。根据当前位置,它们可以将你之前看到的冗长的可笑的导入语句转换为如下简单的语句:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不幸的是,相对导入可能是混乱的,特别是对于目录结构可能改变的共享项目。相对导入也不像绝对导入一样可读,而且很难识别导入资源的位置。

结尾

来到绝对和相对导入速成课程的结尾,很好!现在,你熟悉了导入的工作原理。你已经学习了编写导入语句的最佳实践,并且你知道绝对导入和相对导入之间的区别。

有了新的技能,你可以自信地从Python标准库、第三方包和自己的本地包导入包和模块。记住,你通常应该选择绝对导入,而不是相对导入,除非路径是复杂的,并且会使声明太长。

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

3c4b6713f686ddd3fe5aff.png)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值