包、模块

一、包

1、什么是包?

  包指的是内部包含__init__.py的文件夹

 

2、包的作用

  存放模块,也可以更好的管理模块

 

 

二、模块

1、什么是模块?

  模块是一系列功能的结合体,本质上是一个个的py文件,里面包着一堆函数与代码

 

2、模块的三种来源

  ① python内置模块(python解释器自带的):sys,time,os,turtle等等

  ② 第三方模块(大佬写的):requests,urllib2,beautifulsoup

  ③ 自定义模块(自己写的):自己定义的demo.py

 

3、模块的四种表现形式

  ① 使用python编写的py文件(了解)

  ② 编译后的共享库DLL或者是C或者C++库(了解)

  ③ 包下面带有__init__.py的一组py文件

    - 使用pycharm创建一个名字为py_demo的Python Package

      - __init__.py

      - demo.py

      - demo2.py

  ④ python解释器下的py文件

 

4、为什么要使用模块?

  ① 模块可以帮我们更好的管理功能代码,比如:函数、变量、类...

  ② 可以将项目拆分成一个个的功能,分别存放在不通的py文件(模块)中

 

5、如何创建、编写并使用模块?

  ① 创建模块:创建模块(创建.py文件)

  ② 编写模块:在py文件中编写python代码

  ③ 使用模块:通过import关键字导入模块

    import 模块名

    注意:import 模块时,模块后不能添加.py

 

  在使用模块阶段,必须要注意,哪个是执行文件,哪个是被导入文件(被导入的模块)

    模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找

 

  模块在导入时会发生的事情:

    1.会先执行当前执行文件,并产生执行文件中的名称空间

    2.当执行到导入模块的代码时,被导入的模块会生成一个模块的名称空间

    3.会将被导入模块的名称空间加载到内存中

 

6、给模块起别名

  import 模块 as 别名

 

7、模块的导入方式

  ① import 模块

    在执行文件中直接导入

  ② from 包 import 模块

      from 模块 import 函数名/变量名/类名

 

8、循环导入问题

  例:模块间互相调用

  demo1.py :

    from demo2 import name

    name = "bear"

  demo2.py :

    from demo1 import name

    name = 'apple'

  run.py :

    from demo1 import name

    print(name)

 

  运行run.py一定会报错,报错信息如下:

 

  如何规避这种错误?

解决方法:

    1.需要查找的名字放在导入模块的上方

修改demo1.py
 

  无需修改demo2.py

  执行run.py    # run.py的代码无需修改

 

 

    2.在函数内部导入模块,将模块变成函数名称空间中的名字

修改demo1.py或者demo2.py(以demo1.py为例,将from...import...放进函数中,使用时再调用模块demo1中的函数)
 

  无需修改demo2.py

  执行run.py    # run.py的代码无需修改

 

posted @ 2020-10-13 22:27  chchcharlie、  阅读(122)  评论(0编辑  收藏  举报