zoukankan      html  css  js  c++  java
  • python16 1.模块 2.导入的方式:import | from import -- 名称空间 | 绝对导入 | 起别名 3.环境变量:sys.path 4.导入模块的顺序 5.链式导入 6.循环导入

    复习
    '''
    1.生成器中的send方法
     -- 给当前停止的yield发生信息
     -- 内部调用__next__()取到下一个yield的返回值
    2.递归:函数的(直接,间接)自调用
     -- 回溯 与 递推
     -- 重点:出口 | 递归的条件
    3.匿名函数
     -- lambda 参数列表: (返回值, 返回值)
     -- 应用场景:1.用变量接受  |  2.结合内置函数使用
     -- add = lambda n1, n2: n1 + n2
    4.内置函数
     dic = {'Bob': 88888, 'Tom': 66666}  | [('Bob', 88888), ('Tom', 66666)]
     -- max(iter, key=lambda x: x) | min | map | reduce | sorted
     
     -- bin | oct | hex
     -- max min sum pow abs
     -- len next iter range enumerate
     
      今日内容
     
    1.模块:模块的概念
    2.导入的方式:import | from import
     -- 名称空间***** | 绝对导入 | 起别名
    3.环境变量:sys.path *****
    4.导入模块的顺序
    5.循环导入:模块间相互导入 ******
     
     
      一。模块
    常见的四种模块: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)
     

    ```
     
     
     
     
     
     
  • 相关阅读:
    关于在函数中返回动态的内存
    C与C++中的const
    strcat函数的坑点
    面试题30.最小的k个数
    面试题29.数组中出现次数超过一半的数字
    面试题28.字符串的排列
    面试题27.二叉搜索树与双向链表
    C++中构造函数初始化成员列表总结
    Oracle merge into
    检索 COM 类工厂中 CLSID 解决办法
  • 原文地址:https://www.cnblogs.com/llx--20190411/p/10815707.html
Copyright © 2011-2022 走看看