• python模块第一印象



    一、模块的基本信息

    二、模块的导入方式
    三、模块的导入细节
    四、模块循环导入问题的原因及解决

    -------------------------------------------------------------------------------

    一、模块的基本信息
    1、定义:一系列功能的集合体,用于完成某个特定的工作,类如保洁,需要的工具箱。
    2、出现的原因:很多相互的类似功能,为了方便统一管理,将这些功能放到一个文件中,形成一个集合体,这个文件我们称之为模块。
    3、常见的四种模块来源:
    1、使用python编写的.py文件
    2、从包中获取,把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
    3、内置模块,系统启动时也会调用的模块,使用C编写并链接到python解释器的内置模块
    4、第三方库,提供的自定义模块,就是已被编译为共享库或DLL的C或C++扩展

    二、模块的导入方式

    1、格式: 在要使用模块功能的文件中导入模块格式:import 模块名 - 模块名:用来管理一系列功能的文件名
    2、模块导入过程分析
    第一次导入待遇:
    1、将被导入模块进行预编译,形成相对应的pyc文件。
    2、进入被导入模块,执行模块文件内部代码,同时生成模块相对应的全局名称空间。
    3、在使用模块的文件中,产生一个与模块名同名的变量,指向模块的全局名称空间。
    非第一次导入:
    只会进行第三部操作:在使用模块的文件中,产生一个与模块名同名的变量,指向模块的全局名称空间。


    三、模块的导入细节
    1、模块分类:第一类:内置模块(built-in),第二类:自定义模块其中,包括(系统提供的lib文件下),第三方提供,自定义的py文件模块。
    2、 模块的加载顺序:内存中的模块-内置模块-sys.path下的文件。
    3、关于sys.path环境变量:
    获取方式:import sys | sys.psth得到就是一个列表格式存储的是绝对路径。
    清空环境变量:sys.path.clear(),清空后导入自定义模块变量就不能在使用。
    添加指定路径到环境变量:
    sys.path.append(r'path') | sys.path.insert(0,r'path')
    4、模块的部分功能导入
    语法一:from m1 import fn1,fn2 ...fnn
    语法二:from m1 import fn1 as f
    两种方式进行部分导入。
    同时from...import导入依赖环境变量 sys.path
    语法三:from m1 import * 导入m1中全部的变量。
    其中模块中所有的变量都存在于一个列表中,__all__=[]'a', 'b', 'c', 'd_', '_e'
    注意的是:系统默认添加的__all__中不会纳入 _开头的名字,所以*将会对下滑线变量进行隐藏,但是指名道姓的依然可以导入。


    四:模块循环导入问题的原因及解决

    基本规则:
    规则一:在程序中当遇到模块的二次导入,都是直接引用内存的名称空间,不会在进入模块创建名称空间。
    规则二:只要能拿模块地址,就可以对其进行调用执行。

    循环导入的问题点:名字没有产生就使用名字!
    解决方案:
    1、先产生名字,在导入模块
    2、使用时再导入,进行延后导入,但是只针对需要自定义的模块,内置模块,不会与自定义函数互相导入,所以不存在循环导入。


    # 问题
    # 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)

  • 相关阅读:
    singleTon 模式
    最近的工作经验
    sql server里的快捷键
    Bridge 模式
    [转]在.NET客户端程序中使用多线程
    wse
    关于高频查询界面
    判断字段值已经存在
    获取当前供应商的联系人信息
    获取系统常量
  • 原文地址:https://www.cnblogs.com/zhangte03/p/10815787.html
Copyright © 2020-2023  润新知