zoukankan      html  css  js  c++  java
  • day-16模块

    模块

    常见的四种模块:module
    1.使用python编写的.py文件
    2.把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
    3.使用C编写并链接到python解释器的内置模块
    4.已被编译为共享库或DLL的C或C++扩展


    # 1、什么是模块:一系列功能的集合体

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

    # 3、怎么使用模块
    # -- 在要使用模块功能的文件中导入模块:import 模块名 - 模块名:用来管理一系列功能的文件名

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

    导入模板完成的三件事

    # 首次导入
    import 模块名

    # 1.将被导入的模块编译形成对应的pyc文件
    # 2.进入模块,从上执行执行模块中的代码,将产生的所有名字存放在该模块文件的全局名称空间中
    # 3.在使用模块的文件中,产生一个与模块名(模块文件名)同名的名字,指向模块的全局名称空间


    # 再次导入

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

    起别名

    import 模块名 as 别名

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

    模块的分类

    # 大方向:内置(built-in) | 自定义(系统提供 | 第三方提高 | 自己自定义)

    模块的加载顺序

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

    环境变量

    # 环境变量:存放路径的list,第一位默认一定是当前执行文件所在的路径
    import sys
    # 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)
  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/klw1/p/10815659.html
Copyright © 2011-2022 走看看