zoukankan      html  css  js  c++  java
  • Python模块概念

    补充:生成器表达式

    将列表生成器的中括号改为小括号就是生成器表达式

    res = [i for i in range(10) if i > 5]  #  列表生成式

    res = (i for i in range(10) if i >5)  # 生成器表达式

     

    模块

    • 什么是模块

      模块就是一系列功能的集合体(对函数集的封装)

      模块的三种来源:

      1. 内置模块

      2. 第三方模块

      3. 自定义模块

    • 为何要用模块

      1. 使用内置或者第三方的模块的好处是:拿来主义,极大提升开发效率

      2. 使用自定义的模块的好处是:将程序的各部分组件共用的功能提取出来放到一个模块中,其他的组件通过导入的方式使用该模块,该模块即自定义模块,好处是可以减少代码冗余。

    • 如何使用模块

      • 导入模块的三种方式:

      1. import + 模块

        1. 首次倒入模块的会发生三件事:

          • 会产生一个模块名称空间

          • 会执行模块文件的内容,将产生的名字丢到模的名称空间里

          • 在当前执行的文件中拿到一个名字(模块名),该名字指向模块的名称空间

        1. 模块的内功能的调用

          • module.func()

            缺点:当模块名复杂(stu_ifo_msg)时,会大大降低开发效率。

      2. from + 模块 + import + 函数名,函数名,函数名……

        1. 首次导入模块会发生3件事

          1. 会产生一个模块名称空间

          2. 会执行模块文件内容,见文件中产生的名字丢入到模块的名称空间中

          3. 在当前执行文件中拿到的函数名,该名字指向模块的名称空间中的函数

        2. 功能函数的调用

          • func()

            缺点:当执行函数中有相同函数名时,会造成名称空间混淆

      3. import + 模块 + as + 新名字 (推荐)

        导入原理与第一种方式相同,不论模块名多长,模块内功能多少都能以最精简的方式写出清晰的代码(完美解决以上其他两种导入方式带来的缺陷)。

    • 模块的查找路径(优先级从上到下)

      1. 内存

      2. 内置模块

      3. sys.path(是以执行文件为准)

        <!--当执行代码调用的模块中导入了另一个模块,它的sys.path任然是以当前执行代码的sys.path为准-->

    • 如何区分python文件的两种用途

      print(__ name __)

      • 当文件被当做执行文件导入时__ name__ 的值为__ main__

      • 当文件被当做模块被导入时__ name__的值为模块名

      #  在模块内添加测试该模块的功能代码,但在执行文件中不能让其显示出来
      def func1():
          pass
      def func2():
          pass
      def func3():
          pass
          
      if __name__ == '__main__':  # 当文件被当作模块导入时,__name__='模块名'
          print('执行测试功能')
      
      

    软件开发的目录规范

    ATM

    1. bin

      1. start.py:启动文件

    2. conf(配置文件,允许用户自定义)

      1. settings.py  

    3. core(核心功能)

      1. db:存放数据、账号信息等

      2. src.py : 主程序,核心代码

    4. lib(自定义模块)

      1. common.py

    5. log(日志文件)

      1. Readme.txt(软件介绍)

      2. transcation.tlo(用户日志和交易信息等)

    start.py执行src.py中的功能,首先去bin中找,找不到,报错

    ①在sys.path中添加环境变量,但由于环境变量只针对于当前电脑,所以当程序在其他机器上使用时则无法执行,且只能运行src.py的功能,其他文件则无法执行。

    ② 一、将项目的根目录加到环境变量里

    二、把项目根目录所在的局的对路径拿到,然后加到环境变量里

    解决了只能运行src的缺陷,但是在另一台机器上任然不能使用。

    ③使用__ file __ 内置函数,print( __ file __ )<!--保险起见导入os模块中的os.path.abspath(__ file __)-->得到的是当前执行文件的路径(D:/……/ATM/bin/start.py),将此路径处理后根目录添加到环境变量中。

    # os.path.dirname:获取上一层文件夹,os.path.abspath(__file__)得到的是当前执行文件的路径
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 最终我们需要的当前执行文件的根目录
    sys.path.append(BASE_DIR)  # 添加到环境变量中
    • 为软件的提现功能添加日志功能并可以让用户自定义路径

    软件的执行》》start.py》》scr.py(主程序,业务逻辑功能)》》提现功能下调用common.py中日志功能并记录到log文件夹下的transcation.log文件中,并将路径设置为可由用户自定义—调用conf文件夹下的setting.py的路径设置功能。

    import os
    ​
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 当前执行文件下的根目录
    ​
    LOG_PATH=r'%slog	ranscation.log' %BASE_DIR  # 用户自定义
    • 将start.py文件放入根目录下,所有需要添加环境变量的问题都迎刃而解,不需要绕着弯去添加环境变量。

  • 相关阅读:
    jqgrid 使用入门
    bootstrap build
    bootstrap ace
    前序中序后序
    蓝桥杯-【交换瓶子】
    蓝桥杯-【剪邮票】【2016年省赛B组题解】--bfs+全排列
    蓝桥杯-【方格填数】【2016年省赛B组题解】
    2018年第九届蓝桥杯【C++省赛B组】【第十题:乘积最大】—贪心算法
    2018年第九届蓝桥杯【C++省赛B组】 第九题——全球变暖(bfs+queue)
    2018年第九届蓝桥杯【C++省赛B组】【第八题:日志统计】尺取法
  • 原文地址:https://www.cnblogs.com/liusijun113/p/10065900.html
Copyright © 2011-2022 走看看