[2022.7.13]python模块基础知识


学习内容概要

  • 迭代取值与索引取值的差异
  • 模块简介
  • 导入模块的两种语法句式
  • 导入模块句式的其他用法
  • 循环导入问题
  • 模块查找顺序问题

内容详细

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

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
"""

原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/274165.html

(0)
上一篇 2022年7月13日
下一篇 2022年7月13日

相关推荐

发表回复

登录后才能评论