zoukankan      html  css  js  c++  java
  • 模块,导入方式,环境变量,导入模块的顺序,循环导入

    模块   module

    常见的模块

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

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

    3.使用c编写并链接到的内置模块python解释器

    4.已被编译为共享库或c或c++扩展

      what:一系列功能的集合体

      why:很多相似的功能,要统一管理,将这些功能放在一个文件中,该文件就是管理这些功能的集合体,我们命名为模块

      how:在要使用模块功能的文件中导入模块:import模块名——用来管理一系列功能的文件夹名

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

    导入模块完成的三件事

    首次导入                                         import  模块名

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

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

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

    再次导入

    不再执行模块的前两步骤。只会走第三步:在当前模块中产生一个名字,指向第一次导入在内存中产生的全局名称空间

    起别名        as  别名

    导入一旦起别名,原模块名变量失效,本质只产生了别名,变量指向模块文件的全局名称空间

    模块的分类

    内置            自定义(系统提供,第三方提供,自己自定义)

    模块的加载顺序

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

    环境变量

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

    sys.path 环境变量                   sys.path.clear()清空环境变量,所有导入都不能使用了

    sys.path.append()  /  sys.path.insert()      添加指定路径到环境变量

    from ...import语法导入

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

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

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

      from 模块名 import 模块中的名字1, ..., 模块中的名字n
      from 模块名 import 名字 as 别名

      from。。。import导入依赖变量 sys。path

    from ...import*

    # 模块中默认会添加 __all__ ,__all__ 就是管理模块中能被 * 导入的变量们
    # __all__可以自定义,自定义 * 能导入的变量们, __all__的list中名字全部可以自定义
    __all__ = ['a', 'b', 'c', 'd_', '_e']
    
    
    # 系统默认添加的__all__中不会纳入 _开头的名字
    #       -- 所以默认在外界通过from...import *无法导入_开头的名字
    #        -- _开头的名字对from...import *是隐藏的,指名道姓依然可以被外界导入使用

    链式导入

    # t1导入m1,m1导入m2,m2导入m3
    
    # 执行流程:右键执行t1,在t1导入m1模块的地方直接进入m1,去执行m1,同理在m1执行过程中遇到导入m2,会马上进入m2,去执行m2,一直到m3,m3执行完毕,会回到m2中导入m3的语句,接着往下执行m2,m2执行完毕回到m1,以此类推返回到t1
    
    # 在整个执行流程中,遇到任何模块的二次导入,都是直接引用内存中的名称空间,不会再次进入模块

    循环导入

    # 循环导入的问题点:名字没有产生就使用名字
    # 解决循环导入:先产生名字,在导入模块
    #       -- 将会产生循环导入的模块,导入语法延后 - 延后导入
    
    
    # 问题
    # m1.py
    import m2
    print(m2.y)
    x = 666
    
    # m2.py
    import m1
    print(m2.x)
    y = 888
    
    
    
    # 解决
    # m1.py
    x = 666
    import m2
    print(m2.y)
    
    
    # m2.py
    y = 888
    import m1
    print(m2.x)

     

  • 相关阅读:
    二分查找
    Java版各种排序算法 (冒泡,快速,选择,插入)
    mysql如何利用Navicat 导出和导入数据库
    eclipse项目红色叹号解决方法
    解决tomcat占用8080端口问题
    Window.onLoad 和 DOMContentLoaded事件的先后顺序
    jquery $(document).ready() 与window.onload的区别
    jQuery文档加载完毕的几种写法
    Emmet使用手册
    Sublime Text 3快捷键
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/10815830.html
Copyright © 2011-2022 走看看