当前位置:首页 > 编程问答 >

Python中import是如何实现

提问时间:2020年05月13日 11:30:11问题被 109 网友关注
共 1 个关于“Python中import怎么实现”精选答案
码小辫
推荐于:2020-05-13
最佳回答

基本概念:

模块(module):其实就是一个py文件,里面定义了各种变量,函数,类。

模块除了内建模块(可以用过dir(__builtins__)查看有哪些内建函数),就是非内建模块,这一部分模块就需要用import导入。非内建模块经常需要按照第三方库,一般第三方模块在"安装路径\Python\Python35\Lib\site-packages"目录下。

包(package):一个有层次结构的文件目录,里面包含了模块和一些子包,要求包中必须带有一个__init__.py文件。

导入方法:

import module_name
from module_name import module_element

不难理解,该过程把module_name.py文件的全部内容加载到内存,把变量类型为’module‘赋值给当前模块的同名变量。

在导入模块时。模块所在文件夹将自动生成一个对应的__pycache__\module_name.cpython-36.pyc文件

怎么加载?——加载方式和用法

方式:

1.import package

读这个包的__init__.py,也就是说导入包的本质是执行包下面的__init__.py文件,执行结束后会包名的目录下生成一个"__pycache__ / __init__.cpython-36.pyc" 文件。

2.import module

读整个模块的内容

3.import package1.package2.package3.module4

package读取__init__.py,module读取整个模块内容,按顺序读

注意:因为package是读取__init__.py,所以调用的时候必须在__init__.py有引用的东西才能调用,否则会报错。

从哪里加载?

对于python来说,所有被加载到内存的模块都是放在sys.modules里面,所以执行import时会首先去该列表中查询是否已添加。如果已经在sys.modules中,那就简单了,只需要将该module的name添加到我们正在调用该module的本地空间中。如果还没有放在sys.modules中,就需要在sys.path所有路径的目录中去按顺序查找该模块的文件,这些文件一般后缀为".py"、".pyo"、".pyc"、".pyd"、".dll",找到这些模块后就可以将这些模块添加到sys.modules中,再将module name导入到本地。

参考资料

  • 编写高质量代码:改善Python程序的91个建议出版社:机械工业出版社 作者:张颖赖勇浩著
  • Python数据分析与数据化运营(第2版)出版社:机械工业出版社 作者:宋天龙
  • 基于Python的大数据分析基础及实战出版社:水利水电出版社 作者:余本国
  • Python3零起点教程出版社:Python3官网 作者:廖雪峰
  • Python网络爬虫实战出版社:清华大学出版社 作者:胡松涛
  • 相关问题

  • 浅谈python引用(import)某个模块提示没找到对应模块技巧总结01-15
  • 实例讲解Python中一行和多行import模块问题02-05
  • python import引入不同路径下的模块用法10-08
  • python过滤器和lambda函数如何使用02-22
  • 如何利用aardio实现python编写图形界面01-08
  • 如何使用python Fabric动态修改远程机器hosts03-14
  • 如何使用python做动图03-01
  • 如何备战计算机二级python考试03-09
  • 如何在Python解压缩ZIP文件02-18
  • 如何由java转学python09-17
  • 如何使用Python搭建FTP服务器02-12
  • 实例讲解Python HTTP客户端如何实现自定义Cookie实现03-02
  • 更多答案
    网友NO.701366

    07-11

    Python Day05 python 环境变量和import模块导入, 1.定义 模块:本质就是.py结尾的文件(逻辑上组织python代码)模块的本质就是实现一个功能 文件名就是模块名称 包: 一个有__init__.py的文件夹;用来存放模块文件 2.导入模块 import 模块名 form 模块名 import * from 模块名 import 模块名 as 新名称 3. 导入模块本质 import 模块名 ===》 将模块中所有的数据赋值给模块名,调用时需要模块名.方法名() from 模块名 import 方法名 ==》将该方法单独放到当前文件运行一遍,调用时只需要方法名()即可运行 导入一个包 就是执行包下的__init__.py文件 路径搜索 import sys,os os.path.abspath(__file__) #获取当前文件的全名 os.path.dirname() #获取当前对象的父级目录 sys.path.insert()#将当前……

    网友NO.850719

    06-26

    python中import用法(代码示例),在编写代码时,可能需要某些特定的模块。所以我们在Python中使用单行代码导入这些模块。 但是,如果我们只在运行时才知道所需模块的名称呢?我们如何导入那个模块?可以使用Python内建的 __import__() 函数。它还有助于在运行时导入模块。 语法: __import__(name, globals, locals, fromlist, level) 参数: name :要导入的模块的名称 globals 和 locals :解释名称(全局变量和局部变量) formlist :要导入的对象或子模块(作为列表) level :指定是使用绝对导入还是相对导入。默认值是-1(绝对值和相对值)。 示例1: # 导入numpynp = __import__('numpy', globals(), locals(), [], 0) # array from numpy a = np.array([1, 2, 3]) # prints the type print(type(a)) 输出: class……

    网友NO.943431

    08-26

    python 全局变量的import机制介绍, 先把有问题的代码晒一下: IServer.py from abc import ABCMeta, abstractmethodprint __name__class IServer: def __init__(self): pass @abstractmethod def DoWithA(self): pass @abstractmethod def DoWithB(self): pass IServer_A.py import IServerserverType ='1001'print __name__dir()from CreatFactory import GLOBAL_class_dicdir()class IServer_A(IServer.IServer): def __init__(self): pass def DoWithA(self): print 'Server_A do with interface A' def DoWithB(self): print 'Server_A do with interface B'global GLOBAL_class_dicprint 'the id of GLOBAL_class_dic in A is:',id(GLOBAL_class_dic)GLOBAL_class_dic[serverType] = IServer_Aprint 'GLOBAL_class_dic in a is:', GLOBAL_class_dic IServer_B.py import IServerserverType ='1002'from CreatFactory import GLOBAL_class_dicprint __name__class IServer_B(ISer……

    <
    1
    >

    Copyright 2018-2020 www.xz577.com 码农之家

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com