zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    纯css3实现的超炫checkbox复选框和radio单选框
    css3和jquery实现的可折叠导航菜单(适合手机网页)
    HTML5 Canvas 梦幻的文字飞扬动画教程
    纯css3实现的圆形旋转分享按钮
    纯css3实现的创意图片放大镜
    java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
    python的range函数与切片操作符
    python简单基础代码
    android笔记 : Content provider内容提供器
    android笔记:Service
  • 原文地址:https://www.cnblogs.com/ohlala/p/11475717.html
Copyright © 2011-2022 走看看