返回顶部
首页 > 资讯 > 后端开发 > Python >Python中import机制详解
  • 366
分享到

Python中import机制详解

详解机制Python 2022-06-04 19:06:46 366人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

python语言中import的使用很简单,直接使用 import module_name 语句导入即可。这里我主要写一下"import"的本质。 Python官方 定义:Python code in on

python语言中import的使用很简单,直接使用 import module_name 语句导入即可。这里我主要写一下"import"的本质。

Python官方

定义:Python code in one module gains access to the code in another module by the process of importing it.

1.定义:

模块(module):用来从逻辑(实现一个功能)上组织Python代码(变量、函数、类),本质就是*.py文件。文件是物理上组织方式"module_name.py",模块是逻辑上组织方式"module_name"。

包(package):定义了一个由模块和子包组成的Python应用程序执行环境,本质就是一个有层次的文件目录结构(必须带有一个__init__.py文件)。

2.导入方法


# 导入一个模块
import model_name
# 导入多个模块
import module_name1,module_name2
# 导入模块中的指定的属性、方法(不加括号)、类
from moudule_name import moudule_element [as new_name]

方法使用别名时,使用"new_name()"调用函数,文件中可以再定义"module_element()"函数。

3.import本质(路径搜索和搜索路径)

moudel_name.py


# -*- coding:utf-8 -*-
print("This is module_name.py")

name = 'Hello'

def hello():
  print("Hello")
module_test01.py

# -*- coding:utf-8 -*-
import module_name

print("This is module_test01.py")
print(type(module_name))
print(module_name)

运行结果:


E:PythonImport>python module_test01.py
This is module_name.py
This is module_test01.py
<class 'module'>
<module 'module_name' from 'E:\PythonImport\module_name.py'>

在导入模块的时候,模块所在文件夹会自动生成一个__pycache__module_name.cpython-35.pyc文件。

"import module_name" 的本质是将"module_name.py"中的全部代码加载到内存并赋值给与模块同名的变量写在当前文件中,这个变量的类型是'module';<module 'module_name' from 'E:\PythonImport\module_name.py'>

module_test02.py


# -*- coding:utf-8 -*-
from module_name import name

print(name)

运行结果;
E:PythonImport>python module_test02.py
This is module_name.py
Hello
"from module_name import name" 的本质是导入指定的变量或方法到当前文件中。

package_name / __init__.py


# -*- coding:utf-8 -*-

print("This is package_name.__init__.py")
module_test03.py

# -*- coding:utf-8 -*-
import package_name

print("This is module_test03.py")

运行结果:


E:PythonImport>python module_test03.py
This is package_name.__init__.py
This is module_test03.py

"import package_name"导入包的本质就是执行该包下的__init__.py文件,在执行文件后,会在"package_name"目录下生成一个"__pycache__ / __init__.cpython-35.pyc" 文件。

package_name / hello.py


# -*- coding:utf-8 -*-

print("Hello World")
package_name / __init__.py

# -*- coding:utf-8 -*-
# __init__.py文件导入"package_name"中的"hello"模块
from . import hello
print("This is package_name.__init__.py")

运行结果:


E:PythonImport>python module_test03.py
Hello World
This is package_name.__init__.py
This is module_test03.py

在模块导入的时候,默认现在当前目录下查找,然后再在系统中查找。系统查找的范围是:sys.path下的所有路径,按顺序查找。

4.导入优化

module_test04.py


# -*- coding:utf-8 -*-
import module_name

def a():
  module_name.hello()
  print("fun a")

def b():
  module_name.hello()
  print("fun b")

a()
b()

运行结果:


E:PythonImport>python module_test04.py
This is module_name.py
Hello
fun a
Hello
fun b

多个函数需要重复调用同一个模块的同一个方法,每次调用需要重复查找模块。所以可以做以下优化

module_test05.py


# -*- coding:utf-8 -*-
from module_name import hello

def a():
  hello()
  print("fun a")

def b():
  hello()
  print("fun b")

a()
b()

运行结果:


E:PythonImport>python module_test04.py
This is module_name.py
Hello
fun a
Hello
fun b

可以使用"from module_name import hello"进行优化,减少了查找的过程。

5.模块的分类

内建模块

可以通过 "dir(__builtins__)" 查看Python中的内建函数

>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'windowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__','__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'claSSMethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'fORMat', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round','set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

非内建函数需要使用"import"导入。Python中的模块文件在"安装路径Pythonpython35Lib"目录下。

第三方模块

通过"pip install "命令安装的模块,以及自己在网站上下载的模块。一般第三方模块在"安装路径PythonPython35Libsite-packages"目录下。

--结束END--

本文标题: Python中import机制详解

本文链接: https://lsjlt.com/news/16145.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中import机制详解
    Python语言中import的使用很简单,直接使用 import module_name 语句导入即可。这里我主要写一下"import"的本质。 Python官方 定义:Python code in on...
    99+
    2022-06-04
    详解 机制 Python
  • python import 机制
    Python 环境初始化过程中就会将sys module加载到内存中,但是为了local空间更干净,需要用户亲自导入,通知python.module对象实际上是一个dict在维护着,hello.__dict__打印出属性和属性值...
    99+
    2023-01-31
    机制 python import
  • Python入门基础之import机制
    目录 一、前言 1.1 什么是 import 机制? 1.2 import 是如何执行的? 二、import 机制概览 三、import 勾子(import hooks) ...
    99+
    2024-04-02
  • python的import机制如何实现
    本篇内容主要讲解“python的import机制如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python的import机制如何实现”吧!import 机制功能Python 的 impo...
    99+
    2023-06-30
  • python的import 机制是怎么实现的
    目录import 机制功能单模块导入级联导入from & importimport & asfrom & import & as与module对象有关...
    99+
    2024-04-02
  • Python中append浅拷贝机制详解
    目录Python中append浅拷贝机制Python内存引用append方法浅拷贝机制补充:Python append() 与深拷贝、浅拷贝深浅拷贝Python中append浅拷贝机...
    99+
    2023-02-07
    Python中append浅拷贝 Python append()
  • python中import和from-import的区别解析
    目录. import导入模块的路径两种方式. import 模块名 和 from 模块名 import * 是不同的;.重新导入模块的方法import和from-import的显著区...
    99+
    2022-12-08
    python中import和from-import的区别 python中import from-import
  • python中的属性管理机制详解
    目录一、私有属性二、属性限制-__slots__方法三、python中如何去声明变量四、python中的有关属性一、私有属性 Python并没有真正的私有化支持,但可用下划线得到伪私...
    99+
    2024-04-02
  • 一文详解Python中的重试机制
    目录介绍1. 最基本的重试2. 设置停止基本条件3. 设置何时进行重试4. 重试后错误重新抛出5. 设置回调函数介绍 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如...
    99+
    2024-04-02
  • 详解java中import的作用
    目录一、package二、import三、import的两种导入声明四、static import静态导入五、按需导入机制1.import的按需导入2.static import的按...
    99+
    2024-04-02
  • Python retrying 重试机制详解
    目录循环加判断retrying总结 我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制。下面来...
    99+
    2024-04-02
  • python的广播机制详解
    目录为什么会有广播机制在矩阵或向量相关运算中的广播机制1、一般的运算2、一个矩阵一个向量的情况3、两个向量4、矩阵乘法的广播机制总结为什么会有广播机制 python语言在设计的时候,...
    99+
    2024-04-02
  • 详解Python中的from..import绝对导入语句
    相对或者绝对import 更多的复杂部分已经从python2.5以来实现:导入一个模块可以指定使用绝对或者包相对的导入。这个计划将移动到使绝对的导入成为默认的细节在其他版本的python中。 我们假设你有...
    99+
    2022-06-04
    语句 详解 Python
  • 可能是史上最细的python中import详解
    以前在使用import的时候经常会因为模块的导入而出现一些问题,以及一些似懂非懂半疑惑半糊涂的问题,索性花了点时间研究了一些python引用的方法,并且动手操作试验了一下,深有感触,...
    99+
    2024-04-02
  • Python的import 机制中如何实现远程导入模块
    本篇文章为大家展示了Python的import 机制中如何实现远程导入模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。所谓的模块导入,是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用...
    99+
    2023-06-02
  • node.js中watch机制详解
    几乎所有构建系统都选择使用watch机制来解决开发过程中需要反复生成构建后文件的问题,但在watch机制下,长期以来我们必须忍受修改完代码,保存完代码必须喝口茶才能刷新看看效果的问题。在这里我们尝试探讨为什...
    99+
    2022-06-04
    详解 机制 node
  • 详解Android中AsyncTask机制
    在Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制,还有一种就是今天要详细讲解的 AsyncTask 机制。 AsyncTask&n...
    99+
    2022-06-06
    asynctask Android
  • Android 中Looper机制详解
    版本基于:Android R 0. 前言 在《Android 基于Handler 剖析消息机制》一文中,以 Handler 类为起点详细分析了异步通信,分析了Java 端 Handler 与Looper、MessageQueue、Mes...
    99+
    2023-09-09
    android Looper epoll
  • python中的import
    python中的import操作有点类似于C语言中的#include,但又有很大的不同。在c语言中,#include是编译前将另一个文件包含进当前文件中。在python中导入并非只把一个文件文本插入另一个文件而已。导入其实是运行时的运算,程...
    99+
    2023-01-31
    python import
  • linux7中python Import
    linux7中python ImportError: No module named pymc 处理方法 系统环境 #cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)...
    99+
    2023-01-31
    python Import
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作