迭代取值与索引取值
l1 = [1, 2, 3, 4]
print(l1[0]) # run:1
print(l1[1]) # run:2
print(l1[2]) # run:3
print(l1[3]) # run:4
"""
相比起迭代取值只能按顺序取值不能回退,索引取值可以反复获取任意位置的数据值,但索引取值无法对无序容器类型取值,而迭代取值就可以,只能说各有优缺点,要根据需求选择
"""
res = l1.__iter__()
print(res.__next__()) # run:1
print(res.__next__()) # run:2
print(res.__next__()) # run:3
print(res.__next__()) # run:4
模块
模块就是已经写好的可以直接使用的功能结合体,我们需要使用这种功能时,就不需要在写代码,直接通过使用模块就可以使用模块内的功能
1.内置模块
解释器自带的,使用解释器时就可以直接使用
eg: import time
2.自定义模块
自己写的模块
3.第三方模块
别人写的模块,要在网络上下载,才能使用
eg: 图形识别 语音识别
1.py文件(也被称模块文件)
2.含有多个py文件的文件夹(按照模块的功能储存在不同的文件夹)
3.已被编译为共享库或DLL的c或C++扩展
4.使用C编写并链接到python解释器的内置模块
导入模块的两种句式
import 模块名称
"""
运行时先产生执行文件的名称空间,在产生被导入文件的名称空间并运行文件内所有代码,储存名字,要使用模块内名字时,在名字前面加模块名称+点,被导入文件的名称空间的名字绑定的数据值也可以通过加模块名称+点进行修改
"""
import ma # run:被导入文件执行
print(ma.name) # run:被导入文件的名字
ma.func() # run:被导入文件的函数
name = '执行文件的名字'
print(name) # run:执行文件的名字
print(ma.age) # run:18
ma.age = 20
print(ma.age) # run:20
from 模块名称 import 指定名字
"""
运行时先产生执行文件的名称空间,在产生被导入文件的名称空间并运行文件内所有代码,将名字储存到被导入文件的名称空间,在使用指定的模块内名字时,直接使用名字即可,执行时指向被导入文件的名称空间,但没有指定的名字则不能使用
"""
import ma
from ma import name # run:被导入文件执行
print(name) # run:被导入文件的名字
# print(age) # run:报错 无法使用没有指定的名字
name = '执行文件的名字'
print(name) # run:执行文件的名字
# 同样的名字会冲突,只能使用模块名称+点来区分
print(name) # run:执行文件的名字
print(ma.name) # run:被导入文件的名字
import 模块名称
"通过模块名称+点方法可以用到模块内的所有名字且不会和执行文件名字相冲突,但有时候并不像让所有名字都能使用"
from 模块名称 import 指定名字
"只使用指定的名字且不需要j加模块名称+点,但名字会起冲突"
1.起别名
情况1:多个模块文件内名字相同
from ma import name as am_my # run:ma文件执行
from mb import name as bm_my # run:mb文件执行
print(am_my) # run:ma文件的名字
print(bm_my) # run:mb文件的名字
情况2:原有的模块文件名复杂
import Better bend than break as be
2.导入多个名字
import name, age
# 这种方式建议多个模块功能相似才使用,不相似尽量分开导入
import name
import age
from ma import name,age
# 这种方式建议使用,因为多个名字来自一个模块
3.全导入
form am import * # *是所有的意思
"""
from...import...句式使用模块内的很多名字,可以使用*,也可在模块文件中使用__all__ = [字符串的名字]来控制*能获得的名字
"""
循环导入问题
import mb
print(mb.name)
name = 'ma文件的名字'
import ma
print(ma.name)
name = 'mb文件的名字'
"""
像这种两个文件彼此循环,彼此的名字在没有赋值就使用,会出现报错现象
循环导入尽量避免出现,如果真的避免不了,彼此的名字要在赋值后使用
"""
name = 'ma文件的名字'
import mb
print(mb.name)
name = 'mb文件的名字'
import ma
print(ma.name)
判断文件类型
"""
有时候程序运行起来涉及的文件不止一个
所有py文件都有__name__内置名时,当py文件是执行文件的时候__name__的结果是__main__,当py文件是被导入文件的时候__name__的结果是模块文件名
"""
if __name__ == '__main__':
该文件是执行文件执行的子代码
else:
该文件是被导入文件执行的子代码
模块的查找顺序
1.查找顺序
"""
先去内存中找>>>在去内置中找>>>再去sys.path(程序系统环境变量)中查找
"""
2.使用方法
2.1通用方法
sys.path.append(目标文件所在的路径)
import sys
import mb
sys.path.append('D:\PY01\mb.py') # run:mb文件执行
print(mb.name) # run:mb文件的名字
2.2使用from...import句式
起始位置一定是执行文件所在的路径
from 模块名称 import 指定名字
from mb import name # run:mb文件执行
print(name) # run:mb文件的名字