首页 > 其他分享 >模块基础了解

模块基础了解

时间:2022-10-18 19:44:05浏览次数:60  
标签:文件 name 基础 了解 导入 模块 time import

今日内容详细

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

l1 = [11, 22, 33, 44, 55]
1.索引取值
	可以任意位置任意次数取值
	不支持无序类型的数据取值
2.迭代取值
	只能从前往后依次取值无法后退
	支持所有类型的数据取值(无序有序)
ps:两者的使用需要结合实际应用场景

模块

模块简介

1.模块的本质
	内部具有一定的功能(代码)的py文件
2.python模块的历史
	python刚开始的时候所有搞其他编程语言的程序员都看不起 甚至给python起了个外号>>>:调包侠(贬义词)
	随着时间的发展项目的复杂度越来越高 上面那帮人也不得不用一下python 然后发现真香定律>>>:调包侠(褒义词)
3.python模块的表现形式
	1.py文件(py文件也可以称之为是模块文件)
	2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
	3.已被编译为共享库或DLL的C或C++拓展(了解)
	4.使用C编写并链接到python解释器的内置模块(了解)

模块的分类

1.自定义模块
	我们自己写的模块文件
2.内置模块
	python解释器提供的模块
3.第三方模块
	别人写的模块文件(python背后真正的大佬)

导入模块的两种句式

"""
强调:
	1.一定要搞清楚谁是执行文件 谁是被导入文件
	2.以后开发项目的时候py文件的名称一般是纯英文
		不会含有中文甚至空格
			01 作业详解.py		不会出现
			test.py views.py	出现
	3.导入模块文件不需要填写后缀名
"""
1.import句式
	以import a为例研究底层原理
	"""
	1.先产生执行文件的名称空间
	2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
	3.在执行文件的名称空间中产生一个模块的名字
	4.在执行文件中使用该模块名以点的方式使用模块名称空间中所有的名字
	"""
2.from...import...句式
	以from a import name,func1为例研究底层原理
	"""
	1.先产生执行文件的名称空间
	2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
	3.在执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
	4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
	"""

导入模块补充说明

1.import与from...import...两者优缺点
	import句式
		由于使用模块名称空间中的名字都需要模块名点的方式才可以用
		所以不会轻易的被执行文件中的名字替换掉
		但是每次使用模块名称空间中的名字都必须使用模块名点才可以
	from...import...句式
		指名道姓的导入模块名称空间中需要使用的名字 不需要模块名点
		但是容易跟执行文件中名字冲突
        
2.重复导入模块
	解释器只会导入一次 后续重复的导入语句并不会执行

3.起别名
	import qianyufengyyds as yf
	from qianyufengyyds import qianqianqianqianqian as qyf
	from a import name as n,func1 as f1
    
4.涉及到多个模块导入
	import a
	import qianyufengyyds
	如果模块功能相似度不高 推荐使用第一种 相似度高可以使用第二种
	import a, qianyufengyyds

循环导入问题

1.循环导入
	两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字 极容易报错
2.如何解决循环导入问题
	1.确保名字在使用之前就已经准备完毕
	2.我们以后在编写代码的过程中应该尽可能避免出现循环导入

判断文件类型

所有的py文件都可以直接打印__name__对应的值
	当py文件是执行文件的时候__name__对应的值是
__main__
	当py文件是被导入文件的时候__name__对应的值是模块名

if__name__ == 'main':
	print('我是执行文件 我可以运行这里的子代码')

上述脚本可以用来区分所在py文件内python代码的执行

使用场景
	1.模块开发阶段
	2.项目启动文件
"""
from a import * *默认是将模块名称空间中所有的名字导入
__all__ = ['名字1', '名字2'] 针对*可以限制拿的名字
"""

模块的查找顺序

 先从内存中找,内存中没的话会去内置中找,内置中找不到的话会去sys.path中找(环境变量)
1.内存 
 import a  # 创建一个a.py文件 里面定义一个name
 import time
 time.sleep(15)  # 右键运行 然后将a.py删掉
 print(a.name)   # 最后会执行完毕 并打印a.name所对应的数据
2.内置
 import time  # 此时的time是自定义的time
 print(time)
 print(time.name) # 取自定义time中name的数据
 # 运行会报错 因为当内存中没有time模块时会先去内置中找 内置中的time并没有name  
3.执行文件所在的sys.path(系统环境变量)
 当模块和执行文件不在同一个目录时 直接导入也是会报错的
 可以将模块所在的路径也添加到执行文件的sys.path中即可
 import sys
 print(sys.path) # 查看系统环境变量 是一个列表
 sys.path.append(r'模块的路径')  # 是一个列表 所以可以通过列表的相关命令添加数据 先从内存中找,内存中没的话会去内置中找,内置中找不到的话会去sys.path中找(环境变量)
1.内存 
 import a  # 创建一个a.py文件 里面定义一个name
 import time
 time.sleep(15)  # 右键运行 然后将a.py删掉
 print(a.name)   # 最后会执行完毕 并打印a.name所对应的数据
2.内置
 import time  # 此时的time是自定义的time
 print(time)
 print(time.name) # 取自定义time中name的数据
 # 运行会报错 因为当内存中没有time模块时会先去内置中找 内置中的time并没有name  
3.执行文件所在的sys.path(系统环境变量)
 当模块和执行文件不在同一个目录时 直接导入也是会报错的
 可以将模块所在的路径也添加到执行文件的sys.path中即可
 import sys
 print(sys.path) # 查看系统环境变量 是一个列表
 sys.path.append(r'模块的路径')  # 是一个列表 所以可以通过列表的相关命令添加数据

绝对导入与相对导入

"""
再次强调:一定要分清楚谁是执行文件!!!
		模块的导入全部以执行文件为准
"""
绝对导入
	from mymd.aaa.bbb.ccc.ddd import name  # 可以精确到变量名
	from mymd.aaa.bbb.ccc import ddd  # 也可以精确到模块名
	ps:套路就是按照项目根目录一层层往下查找
  
相对导入
	.在路径中表示当前目录
	..在路径中表示上一层目录
	..\..在路径中表示上上一层目录
	不在依据执行文件所在的sys.path 而是以模块自身路径为准
	from . import b
	相对导入只能用于模块文件中 不能在执行文件中使用
"""
相对导入使用频率较低 一般用绝对导入即可 结构更加清晰
"""

大白话:多个py文件的集合>>>:文件夹
专业:内部含有__init__.py文件的文件夹(python2必须要求 python3无所谓)

标签:文件,name,基础,了解,导入,模块,time,import
From: https://www.cnblogs.com/qian-yf/p/16803133.html

相关文章

  • python模块/导入模块
    索引取值与迭代取值的差异l1=[1,2,3,4,5]1.索引取值可以任意位置任意次数的取值不支持无序类型的数据取值print(l1[3])print(l1[3])#可以直接获取任意位置的......
  • 进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理
    一、模块介绍1.什么是模块​ 其实我们前一阵已经接触过了,importxxx、fromxximportxxx​ 能够有一定功能的集合体就是模块,比如有某些功能的py文件,包含这个文件的......
  • Python基础17
    今日内容概要索引取值与迭代取值的差异模块简介模块分类导入模块的两种句式导入模块补充说明循环导入问题判断文件类型模块的查找顺序绝刀导入与相对导入包概述......
  • 模块与导包
    索引取值与迭代取值的差异索引索引可以重复取值,任意位置取值不支持无序类型的数据取值迭代取值迭代取值只能按照,迭代器内部顺序依次取值支持所有类型的数据取值两......
  • python模块
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的局势补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对......
  • 模块简介
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种语法句式模块循环导入问题解决策略判断文件类型模块查找顺序模块的绝对导入与相对导入1.索引取值......
  • 循环导入、文件类型、模块查找、包
    索引取值与迭代取值的差异l1=[11,22,33,44,55]1.索引取值 可以任意位置任意次数取值不支持无序类型的数据取值2.迭代取值 只能从前往后依次取值无法后退......
  • 模块的初识
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的句式补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对导......
  • day17模块基础简介
    目录索引取值与迭代取值的差异模块简介模块的分类导入模块的两种句式导入模块补充说明循环导入问题判断文件类型模块的查找顺序绝对导入与相对导入包索引取值与迭代取值的......
  • 模块导入的句式、模块的查找顺序
    今日内容回顾目录今日内容回顾索引取值和迭代取值的差异模块简介导入模块的两种句式导入模块的补充循环导入问题判断文件类型模块的查找顺序绝对导入与相对导入包package......