模块

2022/3/28 6:24:06

本文主要是介绍模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

模块的基础学习

内容概要


  • 模块简介
  • 模块的两种导入句式
  • 模块导入补充
  • 循环导入
  • 判断文件类型
  • 模块的查找顺序
  • 绝对导入与相对导入
  • 模块与包
  • 编程思想的演变
  • 软件开发目录规范

内容详情


模块简介

"""
  python之所以很火并且适用于各行各业很大程度上的原因就是>>>:模块
  很多大佬写了很多非常牛逼的模块 供python工程师直接使用(白嫖)
  python刚开始出来的时候被很多其他语言的程序员看不起 嘲笑python是一个‘调包侠’
  (只会调用别人写好的东西,拿来主义跟传统价值观不一致>>>:自己动手丰衣足食) 此时的调包侠是贬义词
  但是当其他语言的程序员开始写python用到了模块之后发现'真香' 调包侠真好用 真牛逼 我好喜欢  此时的调包侠是褒义词
  温馨提示:
    作为一名python工程师 如果遇到一个非常复杂的功能需要实现
    那么第一时间不是想着如何去写 而是去网上找有没有相应的python模块!!!
    (以后出去工作了之后才应该考虑的)
    eg:人脸识别 语言转换 自动感应 类似更本摸不着头脑的几乎都有模块
"""
1.什么是模块?
  模块就是一系列功能的结合体 可以直接使用
2.为什么要用模块?
  极大地提升开发效率(拿来主义>>>:站在巨人的肩膀上)
3.模块的三种来源
  1.内置的模块
    无需下载 解释器自带  直接导入使用即可
  2.自定义模块
    自己写的代码 封装成模块 自己用或者发布到网上供别人使用
  3.第三方模块
    别人写的发布到网上的 可以下载使用的模块(很多牛逼的模块都是第三方)
4.模块的四种表现形式(大白话:长啥样子)
  1.使用python代码编写的py文件  # 掌握
  2.多个py文件组成的文件夹(包)  # 掌握
  3.已被编译为共享库或DLL的c或C++扩展(了解)
  4.使用C编写并链接到python解释器的内置模块(了解)

模块的两种导入句式

"""要想使用模块 必须先导入 而导入的方法有两种"""
# import句式
  import 模块名  # 模块名不能加文件后缀
  """
  导入模块内部到底发送了什么事情
    1.运行当前执行文件产生一个名称空间
    2.运行被导入模块文件产生一个模块空间
    3.在当前执行文件中产生一个模块的名字指向模块名称空间
    4.后续可以通过该名字使用到模块名称空间中所有的名字
  如果重复导入 那么只会执行一次
  """
  """
  import句式的特点
    可以通过import后面的模块名点的方式 使用模块中所有的名字
    并且不会与当前名称空间中的名字冲突(指名道姓)
  """

# from...import...句式
  from...import...句式
  """
  1.运行当前执行文件产生一个名称空间
  2.运行被导入模块文件产生一个模块空间
  3.在当前执行文件中产生import后面写的诸多名字
  4.后续直接使用这些名字就可以调用模块名称空间中对应的名字
  """ 
  """
  from...import...句式的特点
    如果重复导入 那么只会执行一次
    使用该句式可能会造成名字冲突的问题一定要避免
  """

模块导入补充

1.起别名
  模块名或者变量名很复杂可以给模块起别名简写
  import time as tm
  from md import name as nm
2.并列导入
  连续导入多个模块或者变量名
  import md1,md2,md3
  from md import name,money,num
'''并列的几个模块最好具有相似的部分 否则建议分开导入(清晰) 如果是同一个模块下的多个变量名无所谓'''
3.通用导入
  from md import *  # 将md中所有的名字全部加载到当前文件
"""*表示md里面所有的名字 如果模块文件中使用了__all__限制可以使用的名字  那么*号就会失效 依据__all__后面列举的名字"""

循环导入

# 循环导入即两个文件彼此相互导入
  循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错
  """在以后的编程生涯中 尽量去避免出现循环导入的问题"""

# 当我们循环导入时需要确保双方使用的名字都必须'提前定义好'
  方法1:将导入模块的句式写在定义名字的下面
  方法2:将导入模块的句式写在函数体代码内

判断文件类型

# py文件可以被分为两种类型
  执行文件和被导入文件
  有一个内置变量__name__
  当__name__所在的文件是执行文件的时候 结果是__main__
  当__name__所在的文件是被导入文件时候 结果是文件名(模块名)
  可以借助于__name__区分被导入的代码和测试代码
  if __name__ == '__main__':
      当前文件是执行文件的时候才会执行的子代码块
'''由于上述代码在很多启动脚本中经常使用 所以有简写方式 直接输入main之后按tab键即可'''

模块的查找顺序

1.先从内存空间中查找
2.再从内置模块中查找  
3.最后去sys.path查找(类似于我们前面学习的环境变量)
  import sys
  print(sys.path)  # 结果是一个列表 里面存放了很多路径
  """
  当内存中和内置中都没有要查找的模块时 就会去下面的路径中挨个查找
  sys.path中虽然有很多路径 但是只需要重点关注第一个
  第一个其实就是执行文件所在的路径
  '查找模块的时候只需要站在执行文件所在的路径查看即可'
  """
# 如果上述三个地方都找不到 那么直接报错!!!
'''强调:在创建py文件时候一定不要跟模块名(内置、第三方)冲突!!!'''

# 找不到如何解决
方式1:主动添加sys.path路径(类似于添加环境变量)
      import sys
      sys.path.append(r'文件夹路径')
      import 模块
"""pycharm会自动将项目目录所在的路径添加到sys.path中"""
方式2:利用from...import...句式指名道姓的查找
      from 文件夹路径 import 模块  # 从文件夹中导入模块
      from aaa.bbb.ccc import mm  # 通过点的方式进入下一层目录

绝对导入和相对导入

1.在导入模块的时候一切查找模块的句式都是以执行文件为准
  无论导入的句式是在执行文件中还是在被导入文件中!!!
# 绝对导入
  永远按照执行文件所在的路径一层层往下查找(无脑查找即可)
# 相对导入
  相当导入打破了必须参照执行文件的所在路径的要求 只需要考虑当前模块所在的路径然后使用特殊符号.去查找其他模块即可
  from . import a
  相对导入只能在被导入文件中使用 不能在执行文件中使用
  """
  预备知识
      .表示当前路径
      ..表示上一层路径
      ../..表示上上一层路径
  """
'''以后如果想一劳永逸 那么就只使用绝对导入即可'''

模块与包

# 从专业的角度来解释的话
	包就是内部含有__init__.py的文件夹
# 从实际的角度来解释的话
  包就是多个模块的结合体(内部存放了多个模块文件)
  eg:我们的电脑某个文件夹下面有很多不同类型的文件
     视频文件、音频文件、文本文件、图片文件
  为了方便管理我们会习惯性的创建不同的文件夹分类管理
# 在pycharm中甚至直接提供了创建包的选项
  本质就是文件夹里面有一个__init__.py文件
"""
在导入包的时候 索要名字其实是跟包里面的__init__.py要
1.如果想直接通过包的名字使用包里面所有的模块 那么需要在__init__.py中提前导入
  上述方式的好处在于__init__可以提前帮你准备好可以使用的名字		
2.也可以直接忽略__init__的存在使用绝对导入即可
  上述方式的好处在于不需要考虑包的存在 直接当成普通文件夹即可
"""
包里面的__init__可以看成是你的管家 
你可以吩咐它帮你做事 也可以直接架空它自己动手

编程思想演变

1.小白阶段
  此阶段写代码就是在一个文件内不停地堆叠代码的行数(面条版本)
2.函数阶段
  此阶段写代码我们学会了将一些特定功能的代码封装到函数中供后续反复调用
3.模块阶段
  此阶段不单单是将功能代码封装成函数,并且将相似的代码功能拆分到不同的py文件中便于后续的管理
"""
为什么如此演变???
    eg:我们可以现象成使用电脑的过程
       小白阶段相当于在C盘下直接存取各种类型的文件
       函数阶段相当于在C盘下创建文件夹管理文件
       模块阶段相对于考虑性能在不同的盘下存档不同的数据
答案:更加方便、快捷、高效的管理资源
"""

软件开发目录规范

# 我们实际工作中编写的程序软件都是有很多文件夹和文件组成的
	这些文件夹和文件其实都有各自存在的意义和主要功能
"""
课下可以看看自己电脑上下载过的软件所在的位置 
查看文件名称很多时候可以找到相同文件名的文件
"""
1.bin文件夹
  存放程序的启动文件  start.py
2.conf文件夹
  存放程序的配置文件  settings.py
3.core文件夹
  存放程序的核心业务  src.py
  就是最为重要的代码 能够实现具体需求
4.lib文件夹
  存放程序公共的功能  common.py
5.db文件夹
  存放程序的数据  userinfo.txt
6.log文件夹
  存放程序的日志记录  log.log
7.readme文本文件
  存放程序的说明、广告等额外的信息
8.requirements.txt文本文件
  存放程序需要使用的第三方模块及对应的版本
  
ps:目录的名字可以不一致 但是主要的思想是一致的
   就是为了便于管理 解耦合...
拿到启动文件之后直接运行即可 无需考虑程序内部的复杂程度 便于管理
当代码越来越多的时候 你才能体会到拆分的好处!!!


这篇关于模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程