zoukankan      html  css  js  c++  java
  • 模块

    一、模块:

    1. 什么是模块:模块是一些功能的集合体,(最小的模块就是包含了一组功能的python文件)可以通过导入模块来重复使用模块里的所有功能。
    2. 模块的四个通用类别:
      1. 使用python编写的.py文件。
      2. 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
      3. 已经被编译为共享库或DLLCC++扩展
      4. 使用C编写并链接到python解释器的内置模块
    3. 为什么要用文件:1从文件级别组织程序,更方便管理。

                        2拿来主义,提升开发效率。

    二、Import的使用:(导入模块)

    1、模块可以包含可执行语句和函数,模块名第一次遇到导入import语句时才被执行,针对同一个模块可以在程序中的任意位置多次导入。

    (注意:同一个模块在进行多次import时,只有第一次导入时才执行模块内部代码,其余import不执行模块内部代码,)

    2、注意:在第一次导入后,模块就被加载到内存,此处注意查找模块的优先级顺序为:    内存、内置函数、环境变量(sys.path),所以模块内部保存在内存中的值有可能会在执行时被改变。

    3、在第一次导入模块时会做三件事情,重复导入会直接引用内存中已经加载好的结果:

    1. 为源文件(导入的模块)创建名称空间。(在模块中定义的函数和方法若是使     用到了global 时,访问到的就是这个名称空间)
    2. 在新创建的命名空间中执行模块中包含的代码。将产生的名字丢到模块的名称 空间里。
    3. 创建以模块名来引用该命名空间。

    (注意:每个被导入的模块都有自己独立的名称空间,定义在这个模块中的函数把这个名称空间当做全局名称空间,与使用者的全局变量不冲突)

    4、import spam as sm      (模块改名)

          可以应用于if 判断,比如选择不同的阅读方式:导入多种不同的阅读方式模块,并将每一个模块名都改名为sm。最后通过if 选择要导入一个模块,不管导入到的是哪一个都能执行sm.func()  

      5.import 可以在一行导入多个模块:

         Import sys ,os,re

    1. 总结import:(访问模块中的变量时,必须加前缀,不会冲突)

            优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突。

    缺点:引用模块中的名字必须加前缀,不过简洁

    三、from ...import...的使用:

    1. from 模块名 import 模块中的函数名等:直接将该模块中的该名字直接导入当前

    名称空间。

        from 文件夹名 import 模块名:将文件夹中的模块导入当前名称空间

           

    1. form模块名 import *   :表示把该模块中的所有不是以下划线(_)开头的名字

    都导入当前位置。

    优点:在当前名称空间中,直接使用名字就可以了,无需加前缀。

    缺点:容易与当前执行文件中的名字冲突。

    其余与import均无区别,也可以进行相应操作,如改名,一行多个名字等等。

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

    五、py文件区分的两种用途:模块与脚本

    1. 脚本:一个文件就是整个程序,用来被执行。内置全局变量__name__的值为”__main__”
    2. 模块:文件中存放着一堆功能,用来被导入使用。内置全局变量__name__的值为模块名。

    可以用内置全局变量__name__进行判断。

    六、模块搜索路径:

    1. 模块的查找顺序:内存中已经加载好的模块-->内置模块-->sys.path中包含的模块。

               按照顺序依次查找。如果内存中有,直接引用,不重复执行代码

               定义的模块名不应该与内置的模块重名。

         

    1. 路径的插入方式有两种,分别问append(路径)insert(0,路径)insert方法插入能够将路径插在列表的第一位,这样会优先被加载。
  • 相关阅读:
    视图
    触发器
    DNS
    DHCP
    SSH 详解
    apt-get
    java split
    数组指针 指针数组
    函数指针
    网络协议
  • 原文地址:https://www.cnblogs.com/yu-931017/p/10066007.html
Copyright © 2011-2022 走看看