python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python导入

浅析python中的绝对导入和相对导入

作者:python收藏家

这篇文章主要是想和大家简单聊聊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语句,有以下几点:

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

2.导入通常应该用空格分隔。

3.导入应按以下顺序分组。

标准库导入(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。让我们假设以下情况:

# importing a fun1 from pkg1/module1
from pkg1.import module1 import fun1
from 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)中获得批准。

语法和实例:

相对导入的语法取决于当前位置以及要导入的模块或对象的位置。相对导入使用点(.)符号来指定位置。一个点表示模块在当前目录中,两个点表示模块在当前位置的父目录中,三个点表示模块在祖目录中,依此类推。让我们看看下面的目录结构:

让我们假设以下情况:

# 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导入的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文