• D14 模块 导入模块 开发目录规范


    1.模块的简介

      1.什么是模块:   模块就是一系列功能的结合体

      2.模块的三种来源: (1) 内置模块:python解释器自带的 (2)第三方模块:别人写的  (3)自定义的:自己写的

      3.模块的四种表现形式:(1) 使用python编写的py文件

                 (2) 已被编译为共享库或DLL的C或C++扩展

                 (3) 把一系列模块组织到一起的文件夹

                 (4) 使用C编写并连接到python解释器的内置模块

      4.为什么要用模块:(1) 用别人写好的模块(内置的,第三方的):典型的拿来主义,极大的提高开发效率

               (2) 使用自己写的模块(自定义的):当多个文件中都需要使用相同的方法的时候 可以将该公共的方法写到一个py文件中,其他的文件以模块的形式导过去直接调用即可

      5.模块的使用:一定要区分哪个是执行文件那个是被导入文件

    2.import导入模块

      1:import 使用语法  imort + 模块名,使用模块里的名字或方法时需要 模块名.变量(函数),通常导入模块的句式会在文件开头

    import os  # 导入内置os模块
    print(os.path.dirname(__file__))  # 打印当前文件位置

    创建a11.py文件

    print('正在导入a11')
    def
    my_sort(iterable): res = [] for i in iterable: for y,j in enumerate(res): if i > j: res.insert(y,i) break else: res.append(i) return res name = '小明'

        

    import a11  # 导入自定义a11模块,也就是a11.py文件
    print(a11.my_sort([1,23,545,674,324,21]))  # 调用a11中的my_sort函数

       2.导入名字复杂的模块时候取别名:例:  将a11文件名改为ttttttttttttttttttt.py

    import ttttttttttttttttttt as f # 导入自定义ttttttttttttttttttt模块并通过as起一个简单的别名
    print(f.name)  # 可以通过别名来使用模块,相当于ttttttttttttttttttt.name

      3.导入模块时内部的步骤: 在run.py程序中导入a11模块

    1. 右键运行run.py文件首先会创建一个run.py的名称空间
    2. 在第一次导入模块时 会先执行a11.py文件
    3. 运行a11.py文件中的代码将产生的名字与值存放到a11.py名称空间中
    4. run.py文件产生一个指向a11.py名称空间的名称空间

      4.注意:多次导入不会再执行模块文件,会沿用第一次导入的成果,也就是只有第一导入会执行模块里面的代码

      5.import特点: 指名道姓的访问模块中的名字,永远不会与执行文件中的名字冲突

    3.from...import...导入模块

      1:方法:

    from a11 import my_sort   # 只导入a11模块的my_sort方法
    print(my_sort([1,24,5,67,344,22]))  # 使用时不需要通过模块名.名字方法访问,
    print(name)  # name没有导入所以不能使用.会报错

     

    from a11 import *   # 导入a11模块中的所有方法,不推荐使用
    print(my_sort([1,24,5,67,344,22]))  # 使用时不需要通过模块名.名字方法访问,
    print(name)  # 可以使用

      2.名字冲突

    from a11 import name   # 只导入a11模块的my_sort方法
    name = 'xiaohong'
    print(name)  # xiaohong  由于在内部又定义了一个变量name,将指向导入模块中name的指针重新指向新定义的name

      3.导入模块时内部的步骤: 在run.py程序中导入a11模块

    1. 右键运行run.py文件首先会创建一个run.py的名称空间
    2. 在第一次导入模块时 会先执行a11.py文件
    3. 运行a11.py文件中的代码将产生的名字与值存放到a11.py名称空间中
    4. 直接拿到指向模块a11.py名称空间中某个值的名字

      4.特点:访问模块中的名字不需要加模块名前缀,但可能会与当前执行文件中的名字冲突

      5.__all__ 方法:可以限制导入者拿到名字的个数

    4.循环导入模块:

      1: 如果在导入模块出现循环导入问题一定时程序设计不合理,循环导入问题应该在程序设计阶段就避免

      2解决方法:

        (1) 将循环导入语句的句子卸载文件的最下方

        (2) 在函数内部导入模块

    5.__name__的用法:

      1:__name__:(1): 当文件被当做执行文件执行的时候__name__打印的结果是__main__

            (2): 当文件被当做模块导入的时候__name__打印的结果是模块名(没有后缀)

      2 :当我们在写完功能后测试的代码不希望被导入时执行时可以使用__name__方法判断

    print('正在导入a11')
    def my_sort(iterable):
        res = []
        for i in iterable:
            for y,j in enumerate(res):
                if i > j:
                    res.insert(y,i)
                    break
            else:
                res.append(i)
        return res
    name = '小明'
    
    if __name__ == "__main__":  # 快捷键 main 加tab
        print(my_sort([1,223,332,4,24,6]))  

    6.模块的查找顺序  (py文件名不应该于模块名冲突)

      1:先从内存中找

      2:内置中找

      3: path中找   

    7.绝对导入与相对导入

      绝对导入: 必须依据执行文件所在的文件夹路径为基准,无论在执行文件还时被导入文件中都适用

      相对导入: 不能在执行文件中使用,  .代表当前路径  .. 代表上一级路径  ...代表上上级路径

    8.开发目录规范:

      1. bin  存放的是启动文件 (start.py)    通常放在项目根目录或bin文件夹

      2. conf 存放一些常量,配置信息 (settings.py)

      3. core 存放整个项目的核心逻辑 (src.py)

      4.db      数据库相关 (userinfo.txt)

      5. lib     存放一些公用方法(common.py)

      6.log     存放日志(操作记录)  (talk.log)

      7.Readme.txt   使用说明

      

      8 start.py文件内容

    import os  # 导入os模块
    import sys  # 导入sys模块
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))  # 获取软件安装的目录路径(当start.py在bin目录下)
    # BASE_DIR = os.path.dirname(__file__)   # 当start.py在项目根目录下
    sys.path.append(BASE_DIR)  # 将用户安装路径添加到path中
    from core import src  # 从core文件夹导入src模块
    
    if __name__ == '__main__':
        src.run()  # 执行启动文件
  • 相关阅读:
    Mysql:Changes in MySQL 5.6.6 (2012-08-07, Milestone 9):Group-Commit等等:重大变化版本!
    Mysql:Changes in MySQL 5.6.9 (2012-12-11, Release Candidate):GTID-based variables have been 【renamed】
    Mysql:Changes in MySQL 5.6.13 (2013-07-31, General Availability):不再支持可能引起混乱的【选项缩略】写法!
    Mysql:Changes in MySQL 5.6.22 (2014-12-01, General Availability):【sql-log-bin】
    Mysql:Changes in MySQL 5.6.30 (2016-04-11, General Availability):--ssl-mode:
    Mysql:Changes in MySQL 5.6.34 (2016-10-12, General Availability):secure-file-priv
    Windows Linux子系统Windows 10安装指南
    WSL2-参考的对象类型不支持尝试的操作。
    Win10开启Hyper-V后无法运行VMware虚拟机的解决方法
    Kubernetes---高可用的 K8S 集群构建
  • 原文地址:https://www.cnblogs.com/yanglingyao/p/11197149.html
Copyright © 2020-2023  润新知