zoukankan      html  css  js  c++  java
  • python day16

    模块

    常见的四种模块:

      1、使用python编写的.py文件

      2、把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

      3、使用C编写并连接到python解释器的内置模块

      4、已被编译为共享库或DLL的C或C++扩展

    #1、定义:一系列功能的集合体(把一系列功能集合到同一个文件中)

    #2、为什么出现模块:很多相似的功能,需要统一管理,将这些功能放在一个文件夹中,该文件就是管理这些功能的集合体,我们命名为模块

    #3、怎么使用模块:

        --在要使用模块功能的文件中导入模块:import 模块名    -这个模块名就是用来管理一系列功能的文件名

    #4、在哪使用模块:

        --在所有要使用模块中功能的文件中导入并使用模块

    导入模块完成的三件事

      --都是绝对路径导入

    #首次导入  import 模块名

    1、将被导入模块编译形成对应的pyc文件

    2、进入模块,从上往下执行模块中的代码,将产生的所有名字存在在该模块文件的全局名称空间中

    3、在使用模块的文件中产生一个与模块名同名的名字,指向模块的全局名称空间

    # import m2
    # <module 'm2' from 'F:\pyprogram\day16\m2.py'>

     #再次导入

      不会走前两步,直接走第三步,在使用模块的文件中产生一个与模块同名的名字,指向模块的全局名称空间

        首次导入会把导入的模块存入内存,再次导入直接在内存中找,就不会进入模块内部再执行一遍了

    起别名

    import 模块名 as 别名

    有些模块名字比较长,起个简短的别名方便后续的调用

    需要注意的是:一旦起别名,之前的模块名就失效了,本质上只产生了别名变量指向模块的全局名称空间

    模块的分类

    大方向分类:内置模块(Built-in) | 自定义模块

    自定义又可分为:系统提供 | 第三方提供 | 自己自定义

    模块加载的顺序

    内存 > 内置 > sys.path(安装环境变量中路径的先后顺序)

    #环境变量sys.path就是一个列表,里面路径的顺序决定自定义加载的顺序

    环境变量

    环境变量:存放路径的list,第一位默认一定是当前执行文件所在的路径

      #环境变量随着项目的运行而产生,存活于内存中,项目运行结束而消失,一旦形成,不管在项目下的那个地方看sys.path都是一样的

    import sys

      #sys.path就是环境变量

    sys.path.clear()

      #清空环境变量,所有自定义导入都不能使用

      #报错信息:No module named 'm2'

    sys.path.append()

    sys.path.insert()

      #添加指定路径到环境变量中

    from...import语法导入

    导入完成三件事

      1、将被导入的模块编译形成对应的pyc文件

      2、进入模块,从上往下执行模块中的代码,将产生的所有名字存放在该模块的全局名称空间中

      3、再导入模块的文件中形成(一个或者多个)名字指向模块全局名称空间的(一个或多个)具体名字

    from 模块名 import 模块中的名字1...模块中的名字n

    from 模块名 import 名字1 as 别名1,名字2 as 别名2

    #from ...import导入依赖环境变量sys.path

    #sys.path如果清空,导入就会报错

    from ...import *

    #模块中会默认添加__all__, __all__就是管理模块中能被*导入的变量们

    __all__可以自定义,自定义*能导入的变量们,__all__的list中名字全部可以自定义

    __all__ = ['a','b','c','d_','_e']

    #系统默认添加的__all__中不会纳入 _开头的名字

    #    --所以默认再外界通过from...import * 无法导入_开头的名字

    #    --_开头的名字对from...import * 是隐藏的,指名道姓依然可以被外界导入使用(把名字加入__all__中)

    链式导入

    t1导入m1  ,m1导入m2 ,m2导入m3

    执行流程:右键执行t1,在t1导入m1模块的地方直接进入m1,同理m1执行过程遇到导入m2,

    会马上进入m2,去执行m2,一直到m3,m3执行完毕,会回到m2中导入m3的语句,接着往下执行,

    m2执行完毕会回到m1导入m2的语句,以此类推,一直返回到t1,然后执行完毕。

    #在整个执行流程中,遇到任何模块二次导入都不会进入模块,而是直接引用内存中的名称空间

    循环导入

    循环导入:就是在被导入模块中接着导入当前模块

    遇到的基本问题:名字没有产生就是用名字(就会报错)

    解决循环导入的问题:先产生名字,再导入模块

      --将会产生循环导入的模块   导入语法延后  -延后导入

    问题案例:

    #m1.py

    import m2

    print(y)

    x = 100

    #m2.py

    import m1

    print(x)

    y = 200

    #####解决的方法就是把变量定义提到模块导入之前

  • 相关阅读:
    幸福婚姻的八个公式
    中国移动增值服务的现状及趋势
    移动通信与互联网融合已成为趋势
    项目管理入门
    4GMF论坛主席卢伟谈4G全球发展概况
    吴刚实践总结手机网游十大金科玉律
    项目管理五大过程组在通信工程中的运用实例
    报告称近半WAP用户低学历 学生工人上网最多
    手机杂志:成长的烦恼
    3G门户网
  • 原文地址:https://www.cnblogs.com/hesujian/p/10816616.html
Copyright © 2011-2022 走看看