首页 > 其他分享 >模块

模块

时间:2022-10-18 20:15:41浏览次数:58  
标签:__ 文件 name 导入 模块 import

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

  索引取值可以按照 任意索引位任意次数取值。不支持无序数据类型。
  迭代取值只能从前往后依此取值无法返回,支持所有数据类型。

模块

模块简介

本质:
内部具有一定功能(代码)的py文件
模块就是已经封装好的功能体,可以直接使用。
模块就是一个工具包,要想使用这个工具包的工具,就需要导入这个模块
好处:
可以极大的提升开发效率
模块的四种表达形式:
  1.使用python代码编写的文件。
  2.多个py文件组成的文件夹(包)
  3.已经被编译共享库或者dll的c或c++扩展
  4.使用c编写并链接到python解释器的内置模块

模块的分类

1.内置的模块
解释器里自带,直接导入使用即可
2.自定义模块
自己动手写的代码,封装成模块,自己使用或者大家分享使用。
3.第三方模块
别人发到网上的,直接下载使用

导入模块的两种句式

1.import...句式

1.使用 import md    md是被导入文件(模块)
	print(md.name)    
"""一定要分清楚哪个是执行文件,哪个是被导入文件(模块)"""
优点: 使用模块名.的方式,不会轻易的和被执行文件中相同的名称替换。
----------------------------------------------------------------------------
底层原理:
执行当前文件会产生一个当前文件的名称空间
执行import 句式,导入模块文件(此时就会产生一个 模块文件的名称空间)
在当前文件名称空间会产生一个模块的名字。 指向模块的名称空间
通过这个名字以 模块名.的方式就可以使用模块空间中的所有数据
语法:
import 模块名 eg : import time
通过time.time 的方式就可以使用该模块内的功能。

image

2.from...import...句式

from md import name,age
for 模块名 import 该模块中的名字
优点:指名道姓的导入模块名称空间中需要使用的名字。不需要md.
缺点: 容易跟执行文件中相同名字冲突
----------------------------------------------------------------------------   
底层原理:
执行当前文件产生一个当前文件的名称空间。
执行导入语句 运行模块文件产生模块文件的名称空间。存放运行过程中所有名字
当前执行文件中直接使用名字就可以访问名称空间的对应名字。
from md import name,age  # import 后面写什么名字就只能用什么名字
print(name)
print(age)
如果当前执行文件中有一个相同的名字就会产生名称冲突
在使用的时候要避免名称冲突

image

导入模块的句式补充

1.可以给模块名起别名:
在模块名特别长的情况下,我们使用import 时不太方便,我们可以使用如:
import 好长的模块名 as 简写    的形式
import zheigemingzizhenchang as zc 
eg:
impory zheigemingzihaochang as zc
print(zc.模块中的名字)
------------------------------------------------------------------------------
from zheigemingzihaochang import name as n
print(n)
注意from...import 的方式 模块名不可以简写但是 该模块名称空间内的名字可以简写。
------------------------------------------------------------------------------
2.连续导入模块
解释器只会导入一次,后续在同样的执行文件内重复的导入语句并不会执行。
------------------------------------------------------------------------------
3.涉及到多个模块导入
1. import a  # 单个模块
2. import a,b,c,d  # 多个模块
如果导入的多个模块功能相似度高,推荐使用第二种,如果相似度不高推荐使用第一种

循环导入问题及解决策略

当两个文件彼此导入彼此时:
	并且相互使用各自名称空间中的名字时,极容易出现报错
解决方法:
  1. 编写代码的过程中尽可能避免出现循环导入。
  2. 确保名字在使用前已经准备完毕。
如果无法避免循环导入:
  方式一 : 把名字放在import句式上面。
  方式二 : 将导入模块的句式写在函数体代码里面。
  方式三 : 使用多个文件来避免 两个文件彼此导入彼此

判断文件类型

py文件分为两种:
1.执行文件。
2.被导入文件
所有的py文件都可以直接打印__name__对应的值。
当py文件时执行文件的时候 __name__ 对应的值是 __main__
当py文件时被导入文件时__name__ 对应的值是模块名
我们也可以使用__name__区分 被导入的代码和测试代码
if __name__ == '__main__':
    print('如果我在被执行文件内(模块),这里的子代码就无法运行哦')
 #如果 是在执行文件内,就会执行子代码,打印。如果是在被导入文件内,对应的值是模块名。则条件不成立。
简写 输入main + tab自动补全
------------------------------------------------------------------------------
补充:
from a import *    
*默认是将模块名称中所有的名字导入
使用__all__ = ['name','age']  只能使用输入在内的名字,其余的均不可使用

模块的查找顺序

"""
1.内存:   先从内存找
2.内置模块:再从内置模块中找
3.sys.path: 最后去sys.path查找"""
如果上述三个地方都找不到那么直接报错。
------------------------------------------------------------------------------

1. 先从内存找

​ 我们在执行文件中使用time 方法,停顿15秒来测试:

image

image

可以看出我们把b.py删了他还是能调到数据 因为在导入模块时已经调用了b.py已经写到内存里,删除只是删掉硬盘内数据,如果删除后在来一次就不行了。因为程序结束后内存里的数据已经释放了。

2. 验证从内置模块查找

利用time模块查找
import time
print(time)
print(time.time())
"""
<module 'time' (built-in)>  
1666082462.776438  
"""
以后在自定义模块时,不要使名称与内置模块出现冲突。

image

3. 验证从sys.path查找

imoport sys
print(sys.path)
D:\Python38\python.exe D:/pythonProject/day16/time.py
['D:\\pythonProject\\day16', 'D:\\pythonProject\\day16', 'D:\\PyCharm 2021\\plugins\\python\\helpers\\pycharm_display', 'D:\\Python38\\python38.zip', 'D:\\Python38\\DLLs', 'D:\\Python38\\lib', 'D:\\Python38', 'D:\\Python38\\lib\\site-packages', 'D:\\PyCharm 2021\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
结果是一个列表里面是一大串路径。
我们只需要查看第一个路径就可以。
------------------------------------------------------------------------------
如果我们的模块执行不了那么就要把模块的路径放到sys.path里。
解决方法:
使用列表 append方法 把绝对路径加入进sys.path
import sys
sys.path.append(r'D:\pythonProject\day16\my')
print(sys.path)
import AAA
print(AAA)

image

第二种方法
from my.my1 import AAA  # 将my文件夹中的子文件my1中导入模块AAA
print(AAA)

绝对导入与相对导入

 在导入模块的时候一切查找模块的句式都是以执行文件为准
  无论导入的句式是在执行文件中还是在被导入文件中!!!
------------------------------------------------------------------------------
绝对导入:
就是按照目录一层一层往下查找
from my.my1.my2.my3 import name  # 可以精确到变量名
from my.my1.my2 import AAA  # 也可以精确到模块名
------------------------------------------------------------------------------
相对导入:
只能在模块文件中,不能在执行文件中使用。
from . import b  # 在当前目录下导入  b模块
"""
	.表示当前目录
	..表示上一层目录
	../..表示上上一层目录
"""

本质就是一个含有__init__.py文件的文件夹
在python2中必须要求, python3中无所谓

标签:__,文件,name,导入,模块,import
From: https://www.cnblogs.com/LiaJi/p/16803334.html

相关文章

  • python基础入门之模块
    python基础入门之模块索引取值与迭代取值的差异l1=[11,22,33,44,55]1.索引取值print(l1[2])#33 可以任意位置任意次数取值,不支持无序类型的数据取值。2.迭......
  • 模块
    今日内容索引取值与迭代取值的差异1.索引取值可以在任意位置任意次数取值不支持无序类型数据取值2.迭代取值 只能从前往后依次取值并且无法退后 支持所有类......
  • 模块的导入相关知识
    昨日内容回顾异常处理的语法结构try: 下跟被监测的子代码except: 后跟错误类型子代码为该类型错误解决的提示else: 被监测的子代码正常运行时运行的代码fin......
  • 索引取值与迭代取值,模块基础
    目录索引取值与迭代取值,模块基础今日内容概要今日内容详细索引取值与迭代取值的差异模块简介模块的分类导入模块的两种句式导入模块补充说明循环导入问题判断文件类型模块......
  • 模块基础了解
    今日内容详细索引取值与迭代取值的差异l1=[11,22,33,44,55]1.索引取值 可以任意位置任意次数取值 不支持无序类型的数据取值2.迭代取值 只能从前往后依次取值......
  • python模块/导入模块
    索引取值与迭代取值的差异l1=[1,2,3,4,5]1.索引取值可以任意位置任意次数的取值不支持无序类型的数据取值print(l1[3])print(l1[3])#可以直接获取任意位置的......
  • 进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理
    一、模块介绍1.什么是模块​ 其实我们前一阵已经接触过了,importxxx、fromxximportxxx​ 能够有一定功能的集合体就是模块,比如有某些功能的py文件,包含这个文件的......
  • 模块与导包
    索引取值与迭代取值的差异索引索引可以重复取值,任意位置取值不支持无序类型的数据取值迭代取值迭代取值只能按照,迭代器内部顺序依次取值支持所有类型的数据取值两......
  • python模块
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的局势补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对......
  • 模块简介
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种语法句式模块循环导入问题解决策略判断文件类型模块查找顺序模块的绝对导入与相对导入1.索引取值......