• 模块


    模块

    1. 简述

      1. 什么是模块

        我们之前在使用pycharm里创建的.py文件,这个.py文件包含了一组功能,例如:shopping.py 它的模块名为shopping,可以通过import shopping使用。

        在python中,模块的使用方式是一样的,但实际上模块可以分为四个通用类别:

        • 使用python编写的.py文件(自定义模块)

          创建一个.py文件,把一堆函数写进去就是一个模块

        • 已经被编译为共享库或DLL的c或c++扩展

          了解如何使用

        • 把一系列模块组织到一起的文件夹 (文件夹下有个init.py文件,该文件夹称之为包)

          (留空 下次讲关于包知识点 补充)

        • 使用c编写并连接到python解释器的内置模块

          time模块 time.sleep()功能

          内置模块不可能满足我们所有的需求,所以很多情况下需要我们自己自定义模块

      2. 为何要用模块

        • 从文件级别组织程序,更方便管理,这样做能让程序的结构更清晰,方便管理。我们不仅仅可以把这样把这些文件当作脚本去执行,还可以把他们当作模块来导入到其他的模块中,实现了功能的重复利用。

        • 拿来主义,提升开发效率,同样的原理,我们可以下载别人写好的模块,然后导入到自己的项目中使用。

      3. 模块的格式要求有哪些

        .py就是一个模块。

          # file:test.py
        print('from test.py')
        money = 100
        def func0():
           print('func0')
        def func1():
           print('func1')

        模块应该是一个工具箱里的工具,提供功能,所以不应该执行。

    2. 使用模块

      使用关键字来导入模块

      e.g.

        import test #import + 模块名
      # 执行模块的使用
      # from test.py
      test1.func0()
      # func0
    3. 我们在执行模块import test时到底发生什么

      当我们执行test.py,一旦执行一个py文件,就会产生一个该文件的全局名称空间,这个空间中存放着文件中名称和值的对应关系。

      在执行import时 发生了三件事:

      • 创建了一个名称空间

      • 在新创建的名称空间中执行模块中包含的代码,

      • 创建名字 test. + 名字 来访问文件中定义的名字

    4. 被导入的模块有独立的名称空间

      每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

    5. import语句的其他写法

      1. 语法:import xxx as x

        作用:取别名

      2. 语法:from xxx import xxx as x

        作用:取别名

      3. 语法:import xxx,yyy,ddd

        作用:导入多个模块

      4. 语法:from xxx import yyy

        作用:简化书写,使用yyy不需要加前缀,直接可以使用,可能与当前名称空间冲突,如果冲突则按照就近查找的原则。

      5. 语法:from xxx import yyy,zzz

        作用:从模块中导入多个名字,并且不需要加前缀

      6. 语法:from xxx import *

        作用:

        注意!该⽅方式会导⼊入模块中所有的命名空间到当前命名空间。如果模块中名称⾮非常多的话极易易产⽣生名称冲突 使⽤用时要⼩小⼼心

        延伸: 模块中可以控制 * 能被导⼊入的名字 在模块⽂文件中加⼊入 __ all __=["名字1","名字2"] 注意值是字符串串类型

    6. 模块循环导入的问题

      模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码

      在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,可以将共享的数据集中存放到某一个地方

    1. 模块搜索路径

      模块的查找顺序是:内存中已经加载的模块 > 内置模块 > sys.path路径中包含的模块

      我们自定义的模块名不应该与系统内置模块重名

  • 相关阅读:
    Potato工作流管理系统 组织模型用例描述
    6/27 项目编码开始:一个简单的员工管理程序
    6/16 6/17加班2天
    重新过一遍ASP.NET 2.0(C#)(8) DataSourceControl(数据源控件)
    可行性分析报告结构
    6/27 一个简单的员工管理程序:添加微软成员资格数据表
    在asp.net 2.0中使用母版页和工厂方法模式
    工作流功能特性
    6/21 系统分析阶段汇报
    什么是工作流
  • 原文地址:https://www.cnblogs.com/OutOfControl/p/9773760.html
Copyright © 2020-2023  润新知