模块

模块

  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路径中包含的模块

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

转载于:https://www.cnblogs.com/OutOfControl/p/9773760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值