zoukankan      html  css  js  c++  java
  • Python之包的相关

    包的产生:

    • 由于模块不断更新,越写越大,仅用单个py文件会使模块逻辑不够清晰,所以需要将模块的不同功能放入不同的py文件,然后将所有py文件放在一个目录内,这个目录就是包
    • 包就是一个包含用__init__.py文件的目录

    包的使用:

    • 包的本质是模块的一种形式,包是用来被当做模块导入,而不是用来直接运行
    • 导入包本质是导入包内的__init__.py文件
    import package
    
    # Python2导入包,若包里没有__init__.py文件会报错
    # Python3导入包,若包里没有__init__.py文件不会报错
    

    包的导入:

    • 首先有如下文件结构
    '''
    test_dir/
    	-pkg1
    		-__init__.py
    		-p1_m1.py
    			-f1()
    		-p1_m2.py
    			-f2()
    	-pkg2
    		-__init__.py
    		-p2_m1.py
    			-f3()
    		-p2_m2.py
    			-f4()
    	-demo.py
    	
    '''
    
    • 在demo.py内使用函数f1
    • 方式一:

    import pkg1.p1_m1
    pkg1.p1_m1.f1()
    
    # 使用过于啰嗦,可以起别名
    import pkg1.p1_m1 as m1
    m1.f1()
    
    • 方式二:
    # 直接从包内导入文件
    from pkg1 import p1_m1
    p1_m1.f1()
    
    # 也可直接导入f1
    from pkg1.p1_m1 import f1
    f1()
    

    注:对使用者来说,包的导入和单个模块的导入应该方式相同,若使用者导入包失败,应考虑包是否在sys.path列表中。

    • from ...impot 的from 后面可以带多个点. 点的左侧只能是包的名字。

    • from...import 的import后面只能接py文件或文件内的方法

      不能带点.

    from pkg1 import p1_m1.f1
    p1_m1.f1()
    # 语法错误
    

    若要让使用者对包的导入不会发生变化(当作单个模块导入),需要在包内的__init__.py文件内导入其他的模块

    • 绝对导入:

      • 以包作为顶级目录来导入

        # pkg1/__init__.py文件内
        from pkg1.p1_m1 import f1
        from pkg1.p1_m2 import f2
        from pkg2.p2_m1 import f3
        
      • 点的左侧必须是包

    • 相对导入

      • 仅限于包内使用,不能跨出包
      • . :表示当前目录
      • .. :表示上一级目录
    # pkg1/__init__.py文件内
    from .
    
    注:包内之间的导入推荐使用相对导入
    • 在__init.py__内使用from ... import ... 导入包内的其他模块时,无法直接在init.py文件内运行,只能被其他文件用来导入

    • 在init.py文件内不能使用import p1_m1导入包内的其他文件,这样虽然可以直接在init.py文件内运行导入的模块,但当包被其他文件导入时,由于sys.path环境变量原因,包无法使用。

  • 相关阅读:
    Android四大组件--事务详解(转)
    Android课程---关于数据存储的学习(3)之数据库和事务
    初学DW资料——js的prompt的返回值
    初学DW资料——target=的理解
    初学JAVA资料——链表
    初学JAVA资料——哈希表
    初学JAVA资料——线程
    初学JAVA——代码练习(验证字符串结束字符)
    初学JAVA——代码练习(数学运算)
    初学JAVA——代码练习(字符串)
  • 原文地址:https://www.cnblogs.com/ChiRou/p/13471890.html
Copyright © 2011-2022 走看看