模块与包

模块与包

一、什么是包

内部有__ init__.py的文件夹,用于管理模块,包也能够被导入,而且能够一并导入包下全部的模块python

二、为何要用包

包能够帮咱们管理模块,包里面有一个__ init __.py,由它帮咱们管理模块函数

三、怎么使用包

import 包.模块名测试

​ 包.模块.名字code

from 包 import 模块名blog

from 包.模块名 import 模块中的名字内存

四、导入包时发生的事情

  1. 当包被导入时,会以包里的__ init __.py来产生一个名称空间
  2. 而后执行__ init__.py文件,会将 __ init __.py中全部的名字添加到名称空间
  3. 接着会将包下全部的模块的名字加载到__ init __.py产生的内存空间中
  4. 导入模块指向的名称空间就是__ init __.py产生的名称空间

模块

一、什么是模块

模块是一系列功能的结合体,本质上是一个个的.py文件get

模块的三种来源

  1. python内置的模块(python解释器)requests

    好比:sys、time、os、turtleit

  2. 第三方的模块(别写的)编译

    好比:requests

  3. 自定义的模块(本身写的)

    本身定义的py文件

防止导入模块是自动执行测试功能

在测试代码时写加

快捷键:main+enter

if __name__ == "__main__":
    get_demo() # 测试模块

模块的四种表现形式

  1. 使用python编写的py文件(了解)
  2. 编译后的共享库C或者C++库(了解)
  3. 包下面带有__ init__.py的一组py文件

  1. python解释器下的py文件

    python解释器下的文件夹

    ​ 一个个的py文件

二、为何要使用模块

模块能够帮助咱们更好的管理功能代码,好比:函数....

能够将项目拆分红一个个功能,分别存放在不一样的py文件(模块)中

三、如何建立,编写模块,并使用模块

建立:直接新建py文件

编写:在py文件中直接编写python代码

使用:经过import关键字导入模块或者经过from 。。。import。。。导入模块

import 模块 as 模块的别名、from 包/模块 import 模块/(函数名、变量名、类名)as 模块别名

  • 在使用模块时须要注意,谁是执行文件,谁是被导入文件(模块)

  • 模块在首次导入时就已经将其加载到内存中了,当前文件查找的顺序是先从内存中查找,以后的重复导入会直接从内存中查找,不会重复执行文件

四、模块导入时

首次导入模块会作三件事:

  1. 执行源(模块)文件代码
  2. 产生一个新的名称空间来存放执行源(模块)文件过程当中产生的名字
  3. 被导入模块的名称空间加载到内存中

五、循环导入问题

三个文件model1.py、model2.py、执行文件.py
# - model1.py
from model2 import name
name = 'jason'

# - model2.py
from model1 import name
name = 'tank'

# -执行文件.py
from model1 import name
print(name)
>>>
ImportError: cannot import name 'name' from 'model'

解决循环导入问题:

  1. 须要查找的名字放在导入模块的上方
  2. 在函数内部导入,将模块变成函数名称空间中的名字
# 1.须要查找的名字放在导入模块的上方
# - model1.py
name = 'jason'
from model2 import name

# - model2.py
from model1 import name
name = 'tank'

# -执行文件.py
from model1 import name
print(name)
>>>
jason
# 2.在函数内部导入,将模块变成函数名称空间中的名字
# - model1.py
def func():
    from model2 import name
name = 'jason'


# - model2.py
from model1 import name
name = 'tank'

# -执行文件.py
from model1 import name
print(name)
>>>
jason
相关文章
相关标签/搜索