• Python---import 小记


    基础知识

    1.路径:在sys.path这个变量里面的路径找可能匹配的package和module

    2.package:在某个文件夹中添加一个__init__.py,这个文件夹便会被识别为package 

    文件结构:

    错误1:项目文件夹不能作为package导入,需要再加一层结构

     正确:

     导入方法

    示例项目:

    在 A.py 中导入 B.py:

     [在.py文件中导入相同路径下的模块]

    import B         # 导入
    
    print(B.str)    # 使用

    A.py与B.py在同一个路径下,可以直接import

    在 A.py 中导入 D.py:

     [在.py文件中导入相同路径下的包中的模块]

    错误:AttributeError: module 'sub_sub' has no attribute 'D'

    import sub_sub                   # 导入package
    
    print(sub.sub.D.test_str)       # 引用包sub_sub中D.py的test_str变量

    正确:

    from sub_sub import D           # 从sub_sub包中导入D模块
    
    print(D.test_str)               # 使用D中的变量test_str

    由此知,import 后面只能跟模块,而不能直接跟包,直接import 包,在使用时会报错

    在 A.py 中导入 C.py:

     [.py文件与需要导入的模块的上级目录在同一个包内]

    from package.sub2 import C      # 导入package中sub2包的C模块
    print(C.test_str)               # 使用C的变量test_str

    小笔记

    1.导入项目目录不同的路径下的.py文件,最好使用 from  package import module  【扩展为:from package.subpackage import module】的方法,统一使用完整路径,提高移植性,并且各处引用高度统一

    2.引用相同路径下的模块,可以使用import,但是会存在以下问题

    A.py 通过import module 的方式引入了B模块,可以正常获取到B的变量,

    A.py
    import B
    
    class PrintTest(object):
        num = 20
    
        def printtest(self):
            print(B.test_str)
                  
    test_class = PrintTest()
    test_class.printtest()

    但是如果此时,不在同一路径下的C.py 调用A.py时

    报错:ModuleNotFoundError: No module named 'B'

    from package.sub1 import A
    test_str = A.test_class.num
    print(test_str)

    正确:

    A.py
    from packagesub1 import B
    
    class PrintTest(object):
        num = 20
    
        def printtest(self):
            print(B.test_str)
                  
    test_class = PrintTest()
    test_class.printtest()

    此时,C才能够找到不在同一路径下的B文件

    所以,from 路径 import module可以省去很多导入模块寻找不到路径的问题。

     参考:https://www.cnblogs.com/he12345/p/7510767.html

  • 相关阅读:
    最佳调度问题_分支限界法
    运动员最佳配对问题
    最小重量机器设计问题
    实现银行家算法和先进先出算法_对文件读写数据
    n皇后问题_回溯法
    0-1背包_回溯法
    根据前序、中序、后序遍历还原二叉树
    矩阵连乘问题_动态规划
    最长公共子序列_动态规划
    最优二叉查找树_动态规划
  • 原文地址:https://www.cnblogs.com/ohlala/p/11475717.html
Copyright © 2020-2023  润新知