• Python之模块导入


    import sys

    #import module (.py)
    import functools #名词空间 functools
    print(functools)

    print("-------------os----------------------")
    import os.path #dir-->名词空间 os;;os&path是二个py文件
    print(os)
    from inspect import Signature
    print(Signature.__module__) #return 从哪个模块导入

    print("-----------alias--------------------")
    import os.path as osp #dir-->名词空间osp
    print(osp)

    print('-----------from_import---------------')
    from pathlib import Path #dir-->名词空间Path
    from pathlib import * #dir-->['Path', 'PosixPath', 'PurePath', 'PurePosixPath', 'PureWindowsPath']
    import pathlib as pl #导入的名词和别名是一个对象
    from os.path import exists #加载初始化os,os.path ,exists加入本地名词空间并绑定
    print(pl.Path,id(pl.Path))
    print(Path,id(Path))
    '''part1总结
    找到from子句中指定的模块,加载并初始化它(注意不是导入)
    import子句后先查from子句导入的模块是否具有该名称的属性,如果不是尝试导入该名称的子模块
    没有找到抛出importerror异常,这个名称保存到本地名词空间中,如果有as子句,使用as子句后的名称
    '''
    print("------------costomize----------------")
    """
    模块名就是文件名,必须符合标识符的要求,非数字开头的字母数字下划线组合
    搜索顺序sys.path
    """
    print("------------__name__ == __main__-----------------------")
    '''
    自己模块的调用执行测试,对于非主模块,测试本模块内的函数类
    顶层代码没有封装,主模块使用时候没有问题,但是一旦有了新的主模块,老的主模块变成了被导入模块
    由于老模块代码没有封装,一并执行了
    '''
    print("-------------相对导入-------------------------------------")
    '''
    相对导入的模块是为了package之间互相医用资源,即不能作为主函数的入口
    '''

    print("----------------__all__-----------------------------------")
    '''
    #a.py
    __all__ = ['x','y','_b','__c']
    a = 5
    _b = 6
    __c = 7
    x = 10
    y = 20
    #b.py
    from b import *
    import sys
    print(sorted(sys.modules.keys()))
    print(locals()['x'])
    print(locals()['__c'])
    __all__是一个列表,元素是字符串,每一个元素都是模块内的变量名,导入时,导入__all__里面的名称
    访问a中的变量 就可以通过__all__的方式来访问
    '''
    print("----------Public 模块属性---------------------")
    print(__file__) #当前文件的路径
    print(__cached__) #编译后的字节码文件路径
    print(__spec__) #显示模块的的规范
    print(sys.path) #output 搜索路径顺序
    print(__name__) #output __main__
    print(__package__) #模块是包同__name__,否则。可以设置为顶级模块的空字符串
    print(dir())
    print(sys.modules)



    本文为原创文章,转载请标明出处
  • 相关阅读:
    mysql升级8.0之后连接报错
    电压力锅溢锅问题解决
    StarRC 转XRC flow
    2022年2月工作资料
    Python中用Ctrl+C终止多线程程序
    leetcode 方法总结
    Java8中stream
    数据结构与JAVA(JCF)的结合
    git初学
    RedBlack Tree
  • 原文地址:https://www.cnblogs.com/harden13/p/9061392.html
Copyright © 2020-2023  润新知