索引取值与迭代取值的差异
| 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 weiyejing as wyj |
| from weiyejing import weiyejingzuishuai as niubi |
| from a import name as n,func1 as f1 |
| |
| 4.涉及到多个模块导入 |
| import a |
| import weiyejing |
| 如果模块功能相似度不高 推荐使用第一种 |
| 相似度高可以使用第二种 |
| import a, weiyejing |
循环导入问题
| 1.循环导入 |
| 两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字 |
| 2.如何解决循环导入问题 |
| 1.确保名字在使用之前就已经准备完毕 |
| 2.我们以后在编写代码的过程中应该尽可能避免出现循环导入 |
判断文件类型
| 所有的py文件都可以直接打印__name__对应的值 |
| 当py文件是执行文件的时候__name__对应的值是__main__ |
| 当py文件是被导入文件的时候__name__对应的值是模块名 |
| |
| if __name__ == '__main__': |
| print('hahah 我是执行文件 我可以运行这里的子代码') |
| |
| 上述脚本可以用来区分py文件内python代码的执行 |
| |
| 使用场景 |
| 1.模块开发 |
| 2.项目启动文件 |
| """ |
| from a import * *默认是将模块名称空间中所有的名字导入 |
| __all__ = ['名字1'],['名字2'] 针对*可以限制拿的名字 |
| """ |
模块的查找顺序
| 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) |
| |
| sys.path.append(r'D:\pythonProject03\day17\mymd') |
| import ccc |
| print(ccc.name) |
绝对导入与相对导入
| """ |
| 再次强调:一定要分清楚谁是执行文件!!! |
| 模块的导入全部以执行文件为准 |
| """ |
| 绝对导入 |
| 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无所谓) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构