ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[2022.7.13] python模块基础知识

2022-07-13 22:01:06  阅读:112  来源: 互联网

标签:__ 文件 13 python py 导入 模块 import 2022.7


学习内容概要

  • 迭代取值与索引取值的差异

  • 模块简介

  • 导入模块的两种语法句式

  • 导入模块句式的其他用法

  • 循环导入问题

  • 模块查找顺序问题

内容详细

迭代取值与索引取值的差异

l1 = [1,2,3,4,5,6,7,8,9]
# print(l1[0]) # 1
# print(l1[2]) # 2
# print(l1[0]) # 1
# 迭代取值
# res = l1.__iter__()
# print(res.__next__()) # 1
# print(res.__next__()) # 2
# print(res.__next__()) # 3
"""
# 索引取值:
优点:可以根据自己的需求 精确的索引到想要的值 支持反复取值
缺点:针对无序的容器类型 比如 字典 集合 就无法用索引来取值

# 迭代取值:
优点:不区分容器类型 只要容器内有值 都可以取到 最基础通用的一种取值方式
缺点:无法反复的取值 不能回退取值 循环取值直到把最后一个值取出来后报错结束
"""

模块简介

  • 简介:

    模块化是将程序分解为一个个的模块module,通过组合模块来搭建出一个完整的程序。

    优点:

    便于团队开发,方便维护,代码复用。

  • 1.如何理解模块:

    在python中一个脚本(.py)文件就是一个模块,创建模块实际上就是创建一个.py文件

    相当于一系列功能的结合体集成了在一个模块内(.py文件内) 使用模块就相当于拥有使用了这个集合体所有的功能 非常的便捷

  • 2.模块的分类

    2.1.内置模块

    和内置空间一样 都是有解释器提供自带的 直接就可以使用的模块

    import time

    time.sleep()

    首先使用import导入time包,这样意味着我们能够使用time包里的所有公共内容。最后利用time包的相关计时功能计算出该程序执行时长。调用模块可以减少函数的重复使用,精简代码。

     

    2.2.自定义模块

    包含所有你自己定义的函数和变量的文件,其后缀名是.py 例:注册功能 登录功能 ...

    自定义模块的时候要注意命名的规范,使用小写,不要使用大写,不要使用中文,不要使用特殊字符等

     

    2.3.第三方模块

    别人写好的模块 发布于网路上 使用前直接下载导用就可

    例如:

    图片识别 图形可视化 人脸识别 语音识别

  • 模块的表现形式

    1.py文件(py文件也可以称之为是模块文件) 2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储) 3.已被编译为共享库或DLL的c或C++扩展(了解) 4.使用C编写并链接到python解释器的内置模块(了解)

    导入模块的两种句式

    • 1.导入模块句式1

    1.1.import句式
    先创建一个模块(.py文件)
    例如:
    mk.py 里面写入内容

    在创建一个执行文件(zx.py)
    用import mk 调用(不用去写入.py文件名的类型)
       然后就可以去随意调用模块里的功能
    过程:
    ①.创建执行文件时会产生一个执行的名称空间
    ②.创建模块文件时会产生一个导入文件的名称空间
    ③.模块名称空间内写入的代码功能 储存赋值的变量名 在被执行文件名称空间调用获取时指向被导入文件名称空间
       ④.在执行文件中可以用import然后加上导入文件的名字 再用点的方式 点上被导入文件的名字 就可以随意获取模块里的功能信息了
    注意:
    在同一个执行文件内 反复去导入同一个模块 导入语只会执行一次
    import mk  # 有效
    import mk  # 无效
    import mk  # 无效

    image-20220713185448582

image-20220713185229156

  • 2.导入模块的句式2

    2.1 from...import...句式

    # from mk import name # 指名道姓导入(目标明确)

    image-20220713193548602

image-20220713193608467

过程:

1.创建执行文件的名称空间 2.创建被导入文件的名称空间 3.执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中 4.在执行文件中获取到指定的名字 指向被导入文件的名称空间

两种导入句式的优缺点

句式类型优点缺点
import mk 导入语后 模块内的所有功能 都可以随意的去调用 模块里的内容暴露无遗 有时候并不想让他人所有的内容都被获取
from mk import name,index 可以明确的去获取想要的名字 不需要加模块名 名字很容易冲突 如果把绑定的关系修改

补充知识

1.重命名
情况1:多个模块一起调用写入时 有些模块名相同 可以改名调用
for mk import name as mk_a
for mk1 import name as mk1_a
   print(mk_a)
   print(mk1_a)
   情况2:模块名复杂时 也可以从新命名
   import mkkkkkkkk as mk
2.导入多个模块内的多个名字
import mk1 mk2 mk3
   # 如果多个模块内的功能相似 可以一起导入
   如果类型不一建议分开
   
   for mk import name1 index func
  # 上述导入方式是想一次性导入同一个模块里的多个名字

3.全导入
from md import *  # *表示所有
   只有在固定只能使用 from ... import 方式的导入情况下 用加 * 的方式可以一次性全导入所有的名字
   默认情况下 正常全部导入使用
   但是如果在模块文件中使用__all__ = [字符串的名字]控制*能够获取的名字 那执行文件中的 * 就被限制使用的功能了

循环导入问题

  • 本质就是两个py文件 循环相互导入

image-20220713204909263

image-20220713204927233

上述情况就是循环导入的结果

循环导入容易出现 报错现象 使用彼此的名字可能是在没有准备好的情况下就使用了

  • 如何去解决循环报错现象

image-20220713205418403

image-20220713205429904

相互导入时 必须先有一方在被使用名字时 提前先准备好 上述所示

一般这种情况需要尽量避免 可以用另外的py文件去存储 如果真的避免不了 就想办法让所有的名字在使用之前提前准备好

判断文件类型

所有的创建的py文件中都自带一个__name__内置名

情况一:
   当py文件是执行文件的时候
   运行__name__ 结果是__main__
情况二:
当py文件是被导入文件的时候
   运行 __name__ 结果是模块名(文件名)
   
__name__主要用于开发模块的作者测试自己的代码使用

模块的查找顺序

先去内存中查找 > 内置空间找 > sys.path中找
1.导入一个模块 然后在导入过程中删除该模块发现还可以使用
       import mk
       import time
       time.sleep(10)
       print(mk.age)  # 24
"""
即使运行时已删除了 但是名字已经存入到内存中了   执行文件找的时候 会先从内存中去找
"""
2.创建一个跟内置模块名相同的文件名
       for time import name
       # print(name)
       #
       # import time
       # print(time.name)
""" 及时格式导入正确 但是还是会报错
  创建模块时文件名尽量不要和内置模块名冲突
"""
3.导入模块的时候一定要知道谁是执行文件
所有的路径都是参照执行文件来的
  import sys
  sys.path.append(r'C:\pythonProject\7.13\mm')
   import mkk
   print(mkk.name)
   """
1.通用的方式
sys.path.append(目标文件所在的路径)
2.利用from...import句式
起始位置一定是执行文件所在的路径
from mm import mdd
"""
 

 

标签:__,文件,13,python,py,导入,模块,import,2022.7
来源: https://www.cnblogs.com/55wym/p/16475719.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有