知识点1 迭代取值和索引取值的区别
- 1.1 索引取值:
- 优点:可以反复获取任意数据值
- 缺点:对无序的集合体无法取值
l1 = [1, 2, 3]
print(l1[0])
print(l1[1])
print(l1[2])
print(l1[2])
print(l1[1])
print(l1[0])
- 1.2 迭代取值:
- 优点:提供了一种通用的取值方式
- 缺点:取值一旦开始 只能前进 不能退后
l1 = [1, 2, 3]
res = l1.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
知识点2 模块
2.1 定义:
- 模块就是具有特定功能的一个结合体,调用模块就拥有了该模块的所有功能
2.2 分类:
- 1> 内置模块 python解释器自带的模块
- 2> 自定义模块 自己写的模块
- 3> 第三方模块 别人写的发布在网上的模块,使用之前需要先下载
2.3 模块的表现形式
- 1> py文件
- 2> 含有多个py文件的文件夹
- 3> 已被编译为共享库或DLL的c或C++扩展(了解)
- 4> 使用C编写并链接到python解释器的内置模块(了解)
2.4 模块的两种调用放方式
-
1> 整体导入
- 语法: import 模块名
- 优点: 调用之后可是使用该模块名称空间中的所有名字,即通过’模块点’的形式调用
- 缺点: 当只需要调用几个或者少部分模块中的名字的情况下,整体调用浪费内存空间
- 语言描述调用过程:首先产生一个执行文件(被导入文件)的名称空间,模块名被存入该名称空间,接着产生模块文件的名称空间,模块中的所有名字被存入到该名称空间,通过’模块点’的形式可以调用模块名称空间中的所有名字
import time
time.time()
time.sleep()
time.mktime()
-
2> 指名道姓导入
- 语法 from 模块名 import 名字
- 优点 使用时不需要加模块名的前缀
- 缺点 容易和执行文件中的名字发生冲突
- 语言描述调用过程 首先产生一个执行文件(被导入文件)的名称空间,导入的名字被存入该名称空间,接着产生模块文件的名称空间,模块中的所有名字被存入到该名称空间,但只能调用被导入执行文件的名字
from md import money
print(money)
2.5 起别名
from md1 import money as m_md1
from md2 import money as m_md2
print(m_md1)
print(m_md2)
import multiprocessing as mu
2.6 导入多个名字
import time, sys, os
import time
import os
import sys
2.7 全导入
- 语法:from 模块名 import *
- 控制导入数量的方法: 在模块文件中加入__all__ = [想被导入的名字1,想被导入的名字2,]
from multiprocessing import *
知识点3 循环导入
- 1 什么时循环导入?
- 2 循环导入产生的问题,以及产生问题的原因
- 问题:会出现报错的现象
- 原因:在彼此的名字没有准备好的情况下被使用
- 3 如何解决循环导入产生的问题?
- 4 真的推荐使用循环导入吗?
- 不推荐,最大可能的避免循环导入的问题,如果无法避免,则在调用前手动修改产生需要的名字
知识点4 判断文件类型
- 所有的py文件都有一个__ name__ 的内置名 当py文件是执行文件的时候__ name__ 的结果是:__ main__ 当py文件时被导入文件的时候 __ name__ 的结果是:模块名
- 应用场景:模块的作者在模块文件中自己测试功能的时候使用
if __name__ == '__main__':
当文件是执行文件的时候才会执行if的子代码
知识点5 模块的查找顺序
- 1> 内存中查找>>>>>内置中查找>>>>>>sys.path中查找
- 2> 验证过程
import md
import time
time.sleep(15)
print(md.money)
- 3> 切记,不要创建和内置模块名相同的名字
- 4> 所有的路径都要参照执行文件来确定
- 方式1:sys.path.append(目标文件所在的路径)
- 方式2:from … import
sys.path.append(E:\Practices\a\b\c)
from a.b.c import d.py