美文网首页
day17-模块部分

day17-模块部分

作者: 天行_b6d0 | 来源:发表于2020-07-27 16:12 被阅读0次

    一、模块的重载(了解部分)

    考虑到性能的原因,每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,就必须重启程序,python不支持重新加载或卸载之前导入的模块。注意,直接从sys.module中删除一个模块是无法完成卸载的,删了sys.module中的模块对象仍然可能被其他程序的组件所引用,因而不会被清除。

    二、py文件的两种用途

    1、一个编写好的py文件有两种用途:

    • 脚本:一个文件就是一个程序,用来被运行
    • 模块:文件中存放着一堆功能,用来被导入使用

    2、python为我们内置了_name_的全局变量

    • 当py文件被当作脚本执行时,_name等于'_main'
    • 当py文件被当成模块导入时,_name_等于模块名

    3、作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if _name_ == '_main_':

    三、模块的搜索路径与查找优先级

    (1)先从内存中已经导入的模块中查找
    (2)然后再查找内置的模块
    (3)最后去sys.path列表里所存放的多个文件夹中依次查找

    需要特别注意的是:我们自定义的模块名不应该与系统内置模块重名。虽然每次都说,但是仍然会有人不停的犯错。

    在初始化后,python程序可以修改sys.path,路径放到前面的优先于标准库被加载。
    1 >>> import sys
    2 >>> sys.path.append('/a/b/c/d')
    3 >>> sys.path.insert(0,'/x/y/z') #排在前的目录,优先被搜索
    注意:搜索时按照sys.path中从左到右的顺序查找,位于前的优先被查找,sys.path中还可能包含.zip归档文件和.egg文件,python会把.zip归档文件当成一个目录去处理,

    首先制作归档文件:zip module.zip foo.py bar.py

    import sys
    sys.path.append('module.zip')
    import foo,bar
    

    也可以使用zip中目录结构的具体位置
    sys.path.append('module.zip/lib/python')

    windows下的路径不加r开头,会语法错误
    sys.path.insert(0,r'C:\Users\Administrator\PycharmProjects\a')

    至于.egg文件是由setuptools创建的包,这是按照第三方python库和扩展时使用的一种常见格式,.egg文件实际上只是添加了额外元数据(如版本号,依赖项等)的.zip文件。

    需要强调的一点是:只能从.zip文件中导入.py,.pyc等文件。使用C编写的共享库和扩展块无法直接从.zip文件中加载(此时setuptools等打包系统有时能提供一种规避方法),且从.zip中加载文件不会创建.pyc或者.pyo文件,因此一定要事先创建他们,来避免加载模块是性能下降。

    相关文章

      网友评论

          本文标题:day17-模块部分

          本文链接:https://www.haomeiwen.com/subject/ifbjlktx.html