zoukankan      html  css  js  c++  java
  • Python的包

    包的介绍

    # 包是自定义模块的一种
    
    1、什么是包?
       包就是一个包含有__init__.py文件的文件夹,
       。
    
    2、为何要有包?
        包的本质是模块的一种形式,用来被当作模块导入。
        包是用来被导入的。
    
    """
    数据准备
    # 创建一个mm文件夹,里面包含__init__.py文件
    print('1')
    x = 111
    y = 222
    print()
    
    # 使用import导入的步骤
    # 1、产生一个名称空间
    # 2、运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中。
    # 3、在当前执行文件的名称空间中拿到一个名字mm,该mm指向1的名称空间。
    
    import mm
    3、如何使用

       准备数据

    # foo.py文件
    
    def f1():
        print('功能f1')
    
    def f2():
        print('功能f2')
    
    # 随着业务的发展,这种重复的代码越来越多
    def f3():
        print('功能f3')
    
    def f4():
        print('功能f4'
    # import m014.foo
    # m014.foo.f1()
    # m014.foo.f2()
    
    # 绝对导入:以包的文件夹作为起始来进行导入
    # 以下效果相同
    # from m014 import foo
    # foo.f1()
    
    # from m014.foo import f1
    # f1()
    
    # 先从内存找
    # 再从sys.path里找
    # 环境变量是以执行为准的,所有的被导入的模块或者说后续的其他文件引用的sys.path都是参照执行文件的sys.path
    import sys
    sys.path.append('aaa')  # 加入一个文件
    print("===这里在被导入的__init__.py中查看到的sys.path===")
    print(sys.path)
    # 强调:
    1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:
    凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如import 顶级包.子包.子模块,但都必须遵循这个原则。
    但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
    
    2、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间
    
    3、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,
    导入包本质就是在导入该文件

    相对导入仅限于包内使用,不能跨包导入

    .:代表当前文件夹。
    ..:代表上一层文件夹

    数据准备:

    包内模块之间的导入推荐使用相对导入,强调:相对导入不能跨包
    绝对导入:是通用导入模式
    # m1的代码
    def f1():
        print("f1功能")
    # m2的代码
    def f2():
        print("f2功能")
    # m3的代码
    def f3():
        print("f3功能")
    # m4的代码实现调用f1的功能
    from ..m1 import f1
    def f4():
        print("f4功能")
        f1()
    # m5的代码
    def f5():
        print("f5功能")
    # m4的代码,修改m4里的代码,需求:比较绝对导入f5和相对导入f5实现f4调用功能。
    from ..m1 import f1
    
    # 绝对导入:
    # from foo.bbb.m5 import f5
    
    # 相对导入:
    from .m5 import f5  # 包内的导入推荐使用相对导入
    def f4():
        print("f4功能")
        f1()
        f5()
    # foo下__init__.py文件内的代码
    
    # 绝对导入:以包的文件夹作为起始来进行导入
    # from foo.m1 import f1
    # from foo.m2 import f2
    # from foo.m3 import f3
    
    # 相对导入:仅限于包内使用,不能跨包使用
    # .:代表当前文件夹
    # ..:代表上一层文件夹
    
    from .m1 import f1
    from .m2 import f2
    from .m3 import f3
    
    from .bbb.m4 import f4
    # 使用者使用foo模块功能,导入模块,并运行
    
    import sys
    sys.path.append(r'D:pycharmoldboy_29day021aa')
    
    import foo
    # print(sys.path)
    # print(foo.f1)
    # print(foo.f2)
    # print(foo.f3)
    # print(foo.f4)
    # foo.f1()
    # foo.f2()
    # foo.f3()
    # foo.f4()
    
    foo.f4()

     

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/liunaixu/p/12694749.html
Copyright © 2011-2022 走看看