模块导入的句式、模块的查找顺序

今日内容回顾

  • 索引取值和迭代取值的差异
  • 模块的简介
  • 导入模块的两种句式
  • 导入模块的补充
  • 循环导入问题
  • 判断文件类型
  • 模块的查找顺序
  • 模块的绝对导入与相对导入

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

1.索引取值
	可以任意位置次数取值
    不支持无序的数据类型
2.迭代取值
	只能从前往后一次取值无法后退
    支持所有的类型的数据取值(包括有序无序)
# 两者要的使用需要结合实际的应用的场景

模块简介

python语言:最早起源于linux运维、胶水语言、调包侠
1、什么是模块?
	模块:一系列功能的结合体
    
2、为什要用模块?
	为了提高开发效率
    
3、模块的四种表现形式
	1.py文件(py文件也可以称之为模块文件)
    2.含有py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
    3.已被编译为共享或DLL的C或C++的扩展(了解)
    4.使用编写并链接到python解释器的内置模块(了解)
    
4、模块的三种分类
	1.内置的:python解释器自带能够直接导入使用的
    2.第三方的:别人写好的发布在网上的 需要下载后使用
    3.自定义的:自己写的

导入模块的两种句式

'''
1.一定要搞清楚谁是执行文件 谁是被导入文件
2.以后开发项目的时候py文件的名称一是纯英文
	不会出现中文甚至空格
3.导入模块文件你不需要填写后缀名

'''
1.import句式
	以import a 为例研究底层原理
    '''
    1.先产生执行文件的名称空间
    2.执行被导入的文件的代码将产生的名字放入被导入文件的名称空间中
    3.在执行文件的名称空间中产生一个模块的名字
    4.在执行文件中使用该模块名点的方式使用模块名称空间所有的名字 并且肯定不会产生冲突(指名道姓)
    '''
2.from...import...句式
	以from a import name, func1为例研究底层原理
    '''
    1.先产生执行文件的名称空间
    2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
    3.在执行文件中的名称空间中产生对应的名字绑定模块名称空间中对应的名字
    4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
    ps:在使用的时候直接写名字即可 但是当当前名称空间有相同名字的时候 就会产生冲突 使用的就成了当前名称空间
    '''

image

image

导入模块的补充

1.importfrom...imppot...两者优缺点
	import句式
    	由于使用模块名称空间中的名字都需要模块名点的方式才可以用
        所以不会轻易的执行文件中的名字替换掉
        但是每次使用模块名称空间中的名字都必须使用模块点才可以
    from...import...句式
        指名道姓的导入模块名称空间需要使用的名字 不需要模块名点
        但是容易跟执行文件中名字冲突
2.重复导入模块
	解释器只会导入一次 后续重复的导入语句并不会执行
    
3.起别名
	既可以给模块起别名也可以给模块中某个名字起别名
	import mddddd as m
    from mddddd import name as n
    from a import name as n, func1 as f1
    
4.涉及到多个模块导入
	import 模块名1
	import 模块名2
    	
    # 如果功能不同并不属于一个系列那么推荐分行导入 推荐第一种
    相似度高可以使用第二种
    import 模块名1, 模块名2  # 可以连续导入多个模块 但是只有当多个模块功能相似或者属于同一个系列
    
5.通用导入
	from md import *  # 将模块中所有的名字全部导入(*表示所有)
    print(name)
    print(age)
    __all__ = ['money', 'age']  # 在被导入的模块文件中可以使用__all__定可以被导入使用的名字

image

循环导入问题

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']  针对*可以限制拿的名字

'''

image

image

模块的查找顺序

"""
1.先从内存中查找
2.再去内置模块中查找
3.最后去sys.path系统路径查找(自定义模块)
如果都没有查找到则报错
"""
1.内存
import aaa
import time
time.sleep(15)
print(aaa.name)
aaa.func1()
    
2.内存
import time
print(time)
print(time.name)
'''
以后在自定义模块的时候尽量不要与内置模块名冲突
'''

3.执行文件所在的sys.path(系统环境)
# 一定要以执行文件为准
可以将模块所在的路径也添加到执行文件的sys.path中即可

import sys
print(sys.path)  #  一个大列表 结果中第一个元素永远是当前执行文件所在的路径

当某个自定义模块查找不到的时候解决方案
	1.自己手动将该模块所在的路径添加到sys.path中
    	import sys
        sys.path.append(r'D:\pythonparctice\day17\aaa')
    2.from...import...句式
    	from 文件夹名称.文件夹名称 import 模块名
        from 文件夹名称.模块名称 import 名字

image

绝对导入与相对导入

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

包package

大白话:多个py文件的集合>>>就是文件夹
专业:内部含有__init__.py文件的文件夹(python2必须要求 python3无所谓)
posted @   小福福  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
  1. 1 原来你也在这儿 温余福
  2. 2 世间美好和你环环扣扣 温余福
  3. 3 随风起舞 温余福
  4. 4 罪恶都市 温余福
随风起舞 - 温余福
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 米果

作曲 : 高橋優

编曲 : 刘胡轶/貢多杰

制作人 : 刘胡轶/吴青峰

配唱制作人 : 刘胡轶

乐器监制 : 刘胡轶

吉他 : 胡晨

贝斯 : 甯子达

弦乐录音棚 : 中国剧院录音棚

录音工程师 : 倪涵文/李游/李杨/邢铜/韩宽/李巍

录音监制 : 倪涵文/李游

混音&母带工作室 : OKmastering studio

混音&母带工程师 : 全相彦

制作协力 : 刘西洋

制作发行 : 智慧大狗 × 天才联盟

出品人 : 张葛

监制 : 崔恕/王明宇

弦乐监制 : 李朋

弦乐 : 国际首席爱乐乐团

鼓(打击乐):祁大为

和音编写&演唱:鱼椒盐

人声&吉他&鼓(打击乐)录音棚:55Tec studio

我曾将青春翻涌成她

我曾将青春翻涌成她

也曾指尖弹出盛夏

心之所动 且就随缘去吧

这一路上走走停停

这一路上走走停停

顺着少年漂流的痕迹

迈出车站的前一刻

竟有些犹豫

不禁笑这近乡情怯

不禁笑这近乡情怯

仍无可避免

而长野的天

依旧那么暖

风吹起了从前

从前初识这世间

从前初识这世间

万般流连

看着天边似在眼前

也甘愿赴汤蹈火去走它一遍

如今走过这世间

如今走过这世间

万般流连

翻过岁月不同侧脸

措不及防闯入你的笑颜

我曾难自拔于世界之大

我曾难自拔于世界之大

也沉溺于其中梦话

不得真假 不做挣扎 不惧笑话

我曾将青春翻涌成她

我曾将青春翻涌成她

也曾指尖弹出盛夏

心之所动 且就随缘去吧

逆着光行走 任风吹雨打

短短的路走走停停

短短的路走走停停

也有了几分的距离

不知抚摸的是故事 还是段心情

也许期待的不过是 与时间为敌

再次看到你

微凉晨光里

笑得很甜蜜

从前初识这世间

从前初识这世间

万般流连

看着天边似在眼前

也甘愿赴汤蹈火去走它一遍

如今走过这世间

如今走过这世间

万般流连

翻过岁月不同侧脸

措不及防闯入你的笑颜

我曾难自拔于世界之大

我曾难自拔于世界之大

也沉溺于其中梦话

不得真假 不做挣扎 不惧笑话

我曾将青春翻涌成她

我曾将青春翻涌成她

也曾指尖弹出盛夏

心之所动 且就随缘去吧

晚风吹起你鬓间的白发

晚风吹起你鬓间的白发

抚平回忆留下的疤

你的眼中 明暗交杂 一笑生花

我仍感叹于世界之大

我仍感叹于世界之大

也沉醉于儿时情话

不剩真假 不做挣扎 无谓笑话

我终将青春还给了她

连同指尖弹出的盛夏

心之所动 就随风去了

以爱之名 你还愿意吗

点击右上角即可分享
微信分享提示