python学习笔记
今日内容概要
- 迭代取值与索引取值的差异
- 模块简介
- 导入模块的两种语法句式
- 循环导入问题
- 判断文件类型
- 模块的查找顺序
今日内容详细
迭代取值与索引取值的差异
l1 = [11, 22, 33, 44, 55]
# 索引取值
print(l1[0])
print(l1[1])
print(l1[0])
# 迭代取值
res = l1.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
- 索引取值:
优势:可以随意反复的获取任意数据值
劣势:针对无序的容器类型无法取值
- 迭代取值:
优势:提供了一种通用的取值方式(不论数据值是无序的还是有序的)
劣势:取值一旦开始只能往前不能回退(不能随意反复取值)
模块简介
- 如何理解模块
模块可以看成是一系列功能的结合体,使用模块就相当于拥有了这结合体内的所有功能
ps:使用模块编程就相当于站在了巨人的肩膀上
- 模块的分类
模块分类 | 解释 | 例子 |
---|---|---|
内置模块 | 解释器自带的,直接就可以使用的模块 | import time time.sleep(3) # 让程序暂停3秒 |
自定义模块 | 自己写的模块 | 注册功能 登录功能 |
第三方模块 | 别人写的模块,存在于网络上,使用之前需要提前下载 | 图形识别 图形视化 语音识别 |
- 模块的表现形式
1.py文件(py文件也可以称之为是模块文件)
2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
3.已被编译为共享库或DLL的c或C++扩展(了解)
4.使用C编写并链接到python解释器的内置模块(了解)
导入模块的两种句式
导入模块的句式1: import句式
import md
"""
import md
执行文件是
被导入文件是 md.py
1.会产生执行文件的名称空间
2.产生被导入文件的名称空间并运行该文件内所有的代码,存储名字
3.在执行文件中会获取一个模块的名字,通过该名字点的方式就可以使用到被导入文件名称空间中的名字
补充说明
同一个程序反复导入相同的模块,导入语句只会执行一次
"""
导入模块的句式2: from...import...句式
from md import money, read1
read1()
"""
1.创建执行文件的名称空间
2.创建被导入文件的名称空间
3.执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
4.在执行文件中获取到指定的名字,指向被导入文件的名称空间
"""
- 补充说明:
以后真正的项目中所有的py文件名称都是英文,没有所谓的编号和中文
学习模块的时候 模块文件的名称就得用英文
py文件被当做模块导入的时候不需要考虑后缀
- 两种导入句式的优缺点
import md
优点:通过md点的方式可以使用到模块内所有的名字,并且不会冲突
缺点:md什么都可以点,有时候并不想让所有的名字都能被使用
from md import monry, read1
优点:指名道姓的使用指定的名字,并且不需要加模块名前缀
缺点:名字极其容易产生冲突(绑定关系被修改)
- 起别名
情况1:多个模块文件名相同(多个人写)
from md import money as md_my
from md1 import money as md1_my
print(md_my)
print(md1_my)
情况2:原有的模块文件名复杂
import mdddddddddd as md
- 导入多个名字
import time, sys, os
# 上述导入方式建议多个模块功能相似才能适应 不相似尽量分开导入
import time
import os
import sys
from md import money, read1, read2
# 上述导入方式是推荐使用的 因为多个名字出自于一个模块文件
- 全导入
from md import * # *表示所有
ps:针对*号的导入还可以控制名字的数量
在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字
循环导入问题
-
如何理解循环导入
循环导入就是两个文件彼此导彼此
-
循环导入容易出现报错现象
使用彼此的名字可能是在没有准备好的情况下就使用了
-
如何解决循环导入保存现象
彼此在使用彼此名字之前,先准备好
注意:循环导入将来尽量避免出现!!!如果真的避免不了,就想办法让所有的名字使用之前提前准备好
判断文件类型
- 双下__ name__内置名
__name__
所有py文件都自带__name__内置名
当py文件是执行文件的时候__name__的结果是__main__
当py文件是被导入文件的时候__name__的结果是模块名(文件名)
- 双下name内置名的应用场景
一般是模块开发者用于测试自己的代码
if __name__ == '__main__'
当文件是执行文件时,才会执行的子代码
# 一般只出现在整个程序的启动文件中
'''在pycharm中,输入main+Tab 可以自动补全'''
模块的查找顺序
- 查找顺序
1.先去内存中找
2.再去内置中找
3.再去sys.path中找(程序系统环境变量)
- 验证查找顺序
1.导入一个文件,然后在导入过程中删除该文件,发现还可以使用
import md
import time
time.sleep(15)
print(md.money)
2.创建一个跟内置模块名相同的文件名
import time
print(time.time())
from time import name
print(name)
# 创建模块文件的时候尽量不要与内置模块名冲突
3.导入模块的时候一定要知道谁是执行文件
所有的路径都是参照执行文件来的
import sys
sys.path.append(r'被导入文件的路径')
'''
1.通用方式
sys,path.append('目标文件路径')
2.利用from...import句式
from 目标文件路径 import ...
起始位置一定是执行文件所在的路径
'''
import not_same_level # 不能导入
import sys
print(sys.path)
'''['D:\\PycharmProjects\\710new_week',
'D:\\PycharmProjects\\710new_week',
'D:\\PyCharm 2022.1.2\\plugins\\python\\helpers\\pycharm_display',
'D:\\Python36\\python36.zip',
'D:\\Python36\\DLLs',
'D:\\Python36\\lib',
'D:\\Python36',
'D:\\Python36\\lib\\site-packages',
'D:\\PyCharm 2022.1.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
'''
import sys
sys.path.append(r"D:\\PycharmProjects\\710new_week\\aaa")
import not_same_level
print(not_same_level.name) # 不同级的名字
# 会标红,但是不影响运行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了