zoukankan      html  css  js  c++  java
  • 包和模块

    模块


    如何定义一个模块:
    创建一个py文件 把你的功能写入到文件中
    如何使用模块:
    import 关键字 用于导入模块到当前文件夹


    当执行import 做了什么?
    1.创建了一个命名空间
    2.执行被导入的py中的代码 将里面的名字和地址对应关系
    存储到命名空间
    3.在执行文件中 创建一个名字 该名字指向地址 第一步
    创建的命名空间(模块的命名)
    执行的文件和被导入模块的命名 是相互独立的
    在被导入模块中 所有的名字使用的都是自己的 和调用者无关

    import 的其他写法
    1.import xxx as xxx
    给模块取别名 用于简化数据
    #=取别名
    import pppp as my
    my.func()
    print(my.myage)
    2.import xxx,xxxx
    一次导入多个模块
    3. form xxx import xxx
    从模块中导入某个名字到当前名称空间
    注意 要避免名称冲突
    如果冲突了 按照就近查找的原则
    4.form xxx import xxx,xx,x
    从模块中导入多个名称
    5.form xxx import *
    从模块中导入所有名称
    __all__用于控制 使用者可以使用那些名称
    from 和import 除了导入名称不同 其他特性一致
    6.from取别名:
    from pppp as my

    python文件的两种执行方式
    1.作为执行文件 (右键run)
    2.作为模块被导入
    __name__这个名称可以获取当前执行状态
    如果是__main__说明当前文件是执行的
    否则说明是作为模块
    if __name__ == '__main__':
    print('作为执行文件 ')
    print(get_datetime())
    else:
    print('作为模块导入了')

    重复导入模块时 模块中的代码不会重复执行 仅在第一次导入时执行



    当你是使用from xx import 导入时 是将被导入的名字和地址的内存关系/。-。。。。


    首先找内存中已经加载的模块(不会重复加载)-> 内置模块->sys.path
    验证

    查看sys.path(环境变量)
    print



        1.什么是包
    包是一种模块
    对于使用者而言,使用方式和模块没有任何取别
    但本质上就是一个文件夹,与普通文件的区别就是
    多了一个__init__.py叫做包的初始化文件
      2 为何要用包
      包是文件夹,那文件夹就是用来组织文件的
      3.
    #coding:utf-8
    # 注意:
    # 在python2中,包下必须有一个__init__.py文件,而python3中即便是没有也不会报错

    # 首次导入包,发送三件事,
    # 1. 以包下的__init_.py文件为基准来产生一个名称空间
    # 2. 执行包下的__init_.py文件的代码,将执行过程中产生的名字都丢到名称空间中
    # 3. 在当前执行文件中拿到一个名字p1,该p1就是指向__init__.py名称空间的

    # 总结包的使用无非注意三点:
    # 1. 但凡是在导入语句中带点的,点的左边都必须是一个包
    # 2. 导入包就是在导包下的__init__.py文件
    # 3. 如果使用绝对导入,绝对导入的起始位置都是以包的顶级目录为起始点
    # 4. 但是包内部模块的导入通常应该使用相对导入,用.代表当前所在的文件(而非执行文件),..代表上一级
    # 强调:
    # 1. 相对导入只能包内部的模块之间互相导入使用
    # 2. ..上一级不能超出顶级包
    import sys
    sys.path.append(r'D:脱产三期视频day181 包的使用dir1dir2')

    # import p1 #导入模块其实就是在导入包下的__init__.py文件

    # print(p1.xxx)
    # print(p1.yyy)

    # p1.f1()
    # p1.f2()
    # print(p1.p2)
    # p1.p2.f3()

    # p1.f3()





    init的作用
    用于初始化包中的模块
    init中主要做什么?
    导入包中的模块
    包的嵌套
    包里面还有包

    相对导入
    相对于某个模块而言 通常是相对于当前被执行的文件
    (from..m1 import *)
    .表示当前文件 ..表示上一级 ...再上一级
    注意:相对导入仅用于包内模块的相互导入,不能超过顶层包
    和绝对导入
    从执行文件所在的位置开始的路径(import yyy.m1)
    执行文件调用(import yyy)
    from 导入时.点的左边必须时一个包名
    import 后面必须有一个明确的名字,不能有.点

    模块搜索顺序:
    内存已经加载的——》内置的——》sys.path
    sys.modules可用查看内存已经加载的
    我们会经常用sys.path查看模块地址
    两种执行方式:
    1.作为执行文件
    2.作为模块被导入使用
    在代码中可使用__name__来区分

    什么是包?
    是包含一堆模块的文件夹
    本质上就是一个文件夹
    不同的是 包中应该包含__init__.py文件

    为什么使用包?
    从文件夹级别来组织代码

    如何使用:
    与使用模块一样
    注意:在导入一个包时 实际导航导入的是__inti__.py文件


    #导入函数文件夹下模块
    import sys,os
    print(__file__)
    BASE_DIR=os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    #导入函数,









  • 相关阅读:
    【Android 应用开发】 Android 相关代码规范 更新中 ...
    【IOS 开发】Object
    【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
    【IOS 开发】Object
    Unity3D 学习教程 14 C# 旋转镜头
    Unity3D 学习教程 13 C# 销毁炮弹
    Unity3D 学习教程 12 C# 发射炮弹
    Unity3D 学习教程 11 c#脚本控制摄像头
    Unity3D 学习教程 10 复制物体
    Unity3D 学习教程 9 旋转 放大 移动 物体
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9772586.html
Copyright © 2011-2022 走看看