迭代补充和模块
迭代补充和模块
目录
一、迭代取值和索引取值的区别
'''
索引取值:
优势:可以随意位置任意次数取值
劣势:不支持无序类型的取值
迭代取值:
优势:支持所有类型的数据取值(有序无序都可以)
劣势:只能抢钱取值,不能后退
'''
1.索引取值
eg:
l1 = [11,22,33,444]
print(l1[0])
print(l1[2])
print(l1[3]) # 11,33,444
2.迭代取值
eg:
l1 = [11,22,33,444]
l2 = l1.__iter__()
print(l2.__next__())
print(l2.__next__())
print(l2.__next__())
print(l2.__next__()) # 11,22,33,444
二、模块简介
1.模块的简介
在Python中一个.py文件就是一个模块,以md.py为例,md就是模块名
模块就是内部具有一定功能的py文件
2.模块的理解
模块相当于各种工具包,想要什么工具根据工具包的种类拿,在Python中,模块的使用能够让我们少写很多的代码,‘拿来主义’极大的方便提高了我们开发的效率
3.Python模块的表现形式
1.py文件(也是模块文件)
2.含义多个py文件的文件夹
3.已被编译为共享库或者DLL的c或者c++扩展
4.使用c编写,并链接到Python解释器的内置模块
4.模块的分类
内置模块:解释器自带的模块 如:time,random
自定义模块:自己写的模块,可以自己定义功能 如:登录功能,删除功能,修改功能
第三方模块:别人写好的模块,这个模块的使用得先去网上下载 如:numpy,install
三、模块导入两种句式
1.import 模块名
导入模块的时候我们至少有两个文件的,一个是导入文件,一个是执行文件,同一个程序反复导入同一个模块,导入语句只会执行一次
*会产生执行文件的名称空间
*产生被导入文件的名称空间并运行该文件内所有的代码,存储名字
*在执行文件中会获取一个模块的名字,通过改名字点的方式就可以使用被导入文件名称空间中的名字
# 项目中所有的py文件都都得是英文,py文件被当做模块导入的时候不考虑后缀
2.from 模块名 import 成员1,成员2,成员3
from会从模块中导入指定的名字到当前需要执行的名称空间中,他与import的不同就是不会把这个模块都导入需要执行的名称空间中,同一个程序反复导入同一个模块,导入语句只会执行一次,使用模块名称空间内的名字不需要加模块名,直接使用
*创建执行文件的名称空间
*创建被导入文件的名称空间
*执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
*在执行文件中获取指定的名字,指向被导入文件的名称空间
四、模块导入句式的优缺点
import 模块名
优点:通过模块名.的方式可以使用模块内所有的名字,并且不会有冲突
缺点:什么名字都可以. ,但是有时不会让所有的名字都能使用
from 模块名 import 成员1,成员2,成员3
优点:想用什么名字指定即可,不需要加模块名
缺点:名字易起冲突(绑定关系会被修改)
五、导入句式补充知识点
1.用as起别名
在导入句式中,可以通过as给带入模块文件名起一个自定义名字
import as np
# 将模块名简写,方便在代码中使用
from numpy import arry as np_ar
# 将numpy中的arry起一个别名
2.导入多个名字
import time
import name
import age
# 相似模块可以用import 模块1,模块2,模块3
from md import time,name,age
3.*全导入
只能用于from ... import中,导入模块中所有名字时使用
from numpy import *
# 将numpy内所有名字都导入
# 也可以用__all__ = [字符串名字]控制*获取的名字
六、循环导入问题
1.循环导入
两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字 极容易报错
2.如何解决循环导入问题
1.确保名字在使用之前就已经准备完毕
2.我们以后在编写代码的过程中应该尽可能避免出现循环导入
1.举例循环导入报错现象
ps:因为还未定义就被调用发生报错所以只需要在调用前先定义就可以解决
2.解决方式
ps:所以在循环导入前就要把所有名字提前定义好,这里要注意的点是会重复打印两次。
七、判断文件类型
1.__name__内置名
在程序运行中有时候需要用到的文件会有很多,每个文件中自带__name__因此我们可以用__name__来进行判断文件类型
当__name__的结果是__main__时,py文件是执行文件
当__name__的结果是模块名时,py文件是导入文件
2.应用
if __name__ == '__main__' #此方法一般只出现在这个程序的启动文件中
写‘main’然后按‘tab’键,自动补全
八、模块查找顺序
1.先在内存中查找
eg:
import aaa
import time
time.sleep(20)
print(aaa.n)
导入一个文件过程中删除该文件,依旧可以允许,但是再次运行的时候会报错
2.再到内存中找
eg:
import time
print(time.time())
当定义了一个和内置模块名相同的文件名时,导入模块优先导入内置模块
3.最后到sys.path中查找(系统环境变量)
eg:
import sys
sys.path.append(r'/Users/Desktop/每日总结/11')
import a
print(a.n)
一定要以执行文件为准!我们可以将模块所在的路径也添加到执行文件的sys.path中即可
九、模块的绝对导入和相对导入
只要涉及模块导入那么sys.path永远以执行文件所在的路径为准
1.绝对导入
绝对导入:
指给要导入的模块一个较为具体的文件路径,路径之间以.的形式,根据执行文件所在的路径,利用from路径import模块名
2.相对导入
相对导入:
相对导入不参考文件所在的路径,直接以当前被导入的文件即模块文件的路径为准,只能在被导入文件中使用
注意:
1.模块的查找路径按照执行文件的所在路径的为准
2.相对导入只能在被导入的模块文件中使用,不能在执行文件中使用
3.相对导入在项目比较复杂的情况下可能会出错。所以尽量少用。
from . import 模块名 # 导当前目录下的模块文件
from .. import 模块名 # 导入上一级目录下的模块文件
from ../.. import 模块名 # 导入上一级目录下的模块文件
十、包
包是模块的另外一种形式,包就是多个模块组成放在一个文件夹里,就是文件夹里面有多个模块,也就是包的内部含有__init__.py文件的文件夹