目录
迭代取值与索引取值的差异
l1 = [11, 22, 33, 44, 55]
# 索引取值
print(l1[0]) # 11
print(l1[1]) # 22
print(l1[0]) # 11
# 迭代取值
res = l1.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
索引取值
-
优势:可以随意反复的获取任意数据
-
劣势:针对无序的容器类型无法取值
迭代取值
-
优势:提供了一种通用的取值方式
-
劣势:取值 一旦开始只能往前不能后退
模块
简介
-
python屈辱史
- python刚开始出来的时候,被其他的编程程序员瞧不起(因为太简单)
- 外号:调包侠(贬义词)
- 随着业务的扩展,其他程序员也需要使用python写代码(真香警告)
- 外号:调包侠(褒义词)
- python刚开始出来的时候,被其他的编程程序员瞧不起(因为太简单)
-
模块:一系列功能的结合体,使用模块就相当于拥有了这结合体内的所有功能(是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句)
-
模块分类:
-
内置模块:python解释器自带的,可以直接使用(import time)
-
自定义模块:我们自己写的模块
-
第三方模块:在网络上别人写的模块,使用时需要提前下载(图形识别、图形可视化、语音识别)
-
-
模块表现形式:
- py文件(py文件也可以叫做模块文件)
- 含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
- 已被编译为共享库或DLL的c或c++扩展(了解)
- 使用c编写并链接到python解释器的内置模块(了解)
导入模块的两种语法句式
模块文件注意事项
- 在以后真正的项目中,py文件命名必须是英文
- 学习模块的时候,模块文件名称得用英文
- py文件被当做模块导入的时候不需要考虑后缀
导入模块句式一:import句式
import md
'''
执行文件:run.py
被导入的文件:import 后面的文件名 eg:md.py
'''

- 过程:
- 会产生执行文件的名称空间
- 产生被导入文件的名称空间并运行该文件内所有的代码,导入存储的名字
- 在执行文件会获取一个模块的名字,通过该名字点的方式就可以使用到被导入的文件名称空间中的名字

- 注意:同一个程序反复导入相同的模块,导入的语句只会执行一次
import md # 有效
import md # 无效
import md # 无效
导入模块句式二:from-import句式(指名道姓的导入)
from md import money, read1
print(money)
read1()

- 过程:
- 创建执行文件的名称空间
- 创建被导入文件的名称空间
- 执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
- 在执行文件中获取到指定的名字,指向被导入文件的名称空间

两种导入句式的优缺点
- import …
- 优点:通过点的方式可以使用到模块内所有的名字,并且不会冲突
- 缺点:什么都可以点,有时候并不想让所有的名字都能被使用
- from … import …
- 优点:指名道姓的使用指定名字,还不需要加模块名前缀
- 缺点:名字容易产生冲突(冲突:绑定关系被修改)
导入模块句式的其他用法
起别名
- 情况一:多个模块文件名相同(多个人写)
from md import money as md_my
from md import money as md1_my
print(md_my)
print(md1_my)
- 情况二:原有的模块文件名复杂
import mdddddddddd as md
导入多个名字
import time,sys,os
# 上述导入方式建议多个模块功能相似才能适应,不相似尽量分开
import time
import os
import sys
from md import money,read1,read2
# 这个导入方式是推荐使用的,因为多个名字出自于同一个模块文件
全导入
# 需求:需要使用模块名称空间中的很多名字,并且只能使用from...import句式
from md import * # *表示所有
'''针对 * 的导入还可以控制名字的数量'''
__all__ = [字符串名字]
# 可以用来在模块文件中控制*能够获取的名字
循环导入问题
-
循环导入:循环导入就是两个文件互相导入
-
循环导入出现报错现象原因:使用彼此的名字可能是在没有准备好的情况下就使用了

- 解决循环导入保存现象:在彼此使用彼此名字之前先准备好

- 注意:循环导入将来要尽量避免出现,如果真的避免不了就想办法让所有的名字在使用之前提前准备好
判断文件类型
-
__ name__内置名
- 所有py文件都自带__ name__内置名
- 当py文件是执行文件的时候__ name__ 的结果是__ main__
- 当py文件是被导入文件的时候__ name__的结果是模块名(文件名)
-
__ name__内置名的应用场景
- 一般是模块开发者用于测试自己的代码
if __name__ == '__main__':
当文件是执行文件的时候才会执行if的子代码
上述判断一般只出现整个程序的启动文件中
ps:在pycharm中可以直接编写main按tab键自动补全
模块的查找顺序
-
内存查找>>>>>内置中查找>>>>>sys.path中查找(程序系统环境变量)
- 内存查找:导入一个文件,然后在导入过程中删除该文件,发现还可以使用
import md
import time
time.sleep(15)
print(md.money)
-
创建一个跟内置模块名相同的文件名
- 注意:创建模块文件的时候尽量不要与内置模块名冲突
import time
print(time.time())
from time import name
print(name)

-
sys.path中查找(程序系统环境变量):导入模块的时候一定要知道谁是执行文件
- 所有的路径都是参照执行文件来的,执行文件默认只能导入同级的模块文件,如果要导入不同级的模块文件,需要添加模块文件的路径
import mdd # 不能导入
import sys
print(sys.path)
'''
['D:\\pycham\\PycharmProjects\\day22',
'D:\\pycham\\PycharmProjects\\day22',
'D:\\pycham\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display',
'D:\\python\\python36\\python36.zip',
'D:\\python\\python36\\DLLs',
'D:\\python\\python36\\lib',
'D:\\python\\python36',
'D:\\python\\python36\\lib\\site-packages',
'D:\\pycham\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend', '被导入文件的路径']
'''

# 解决办法
import sys
sys.path.append(r'D:\pycham\PycharmProjects\day22\yahuo') # 将mdd的路径添加到sys中
import mdd
print(mdd.name) # 不同级的名字
import sys
sys.path.append(r'被导入文件的路径')
'''
1.通用方式
sys,path.append('目标文件路径')
2.利用from...import句式
from 目标文件路径 import ...
起始位置一定是执行文件所在的路径
'''

posted on
浙公网安备 33010602011771号