目录
今日内容
索引取值与迭代取值的差异
l1 = [11,22,33,44,55]
1.索引取值
可以任意位置任意次数取值
不支持无序类型的数据取值
2.迭代取值
只能从前往后依次取值无法后退
支持所有类型的数据取值(无序有序)
PS:两者的使用需要结合实际应用场景
模块
模块简介
- 模块的本质
内部具有一定的功能(代码)的py文件
- python模块的历史
python刚开始的时候所有搞其他编程语言的程序员都看不起,甚至给python起了个外号>>>:调包侠(贬义词)
随着实际的发展项目的复杂程度越来越高,上面那帮人也不得不用python,然后发现了真香定律>>>:调包侠(褒义词)
- python模块的表现形式
- py文件(py文件也可以称之为是模块文件)
- 含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
- 已被编译为共享库或者DLL的c或者C++扩展(了解)
- 使用C编写并链接到python解释器的内置模块(了解)
模块分类
- 自定义模块
我们自己写的模块文件
- 内置模块
python解释器提供的模块
- 第三方模块
别人写的模块文件(python背后真正的大佬)
导入模块的两种句式
- 强调:
- 一定要搞清楚谁是执行文件,谁是被导入文件
- 以后开发项目的时候py文件的名称一般是纯英文
- 不会含有中文甚至空格
- 01 作业讲解.py(不会出现)
- test.py/views.py(出现)
- 导入模块文件不需要填写后缀名
- import句式
- 以import a为例研究底层原理
1.1 先产生执行文件的名称空间
1.2 执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
1.3 在执行文件的名称空间中产生一个模块的名字
1.4 在执行文件中使用该模块点名的方式使用模块名称空间中所有的名字
- from...import...句式
- 以from a import name,func1为例研究底层原理
1.1 先产生执行文件的名称空间
1.2 执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
1.3 在执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
1.4 在执行文件中直接使用名字就可以访问名称空间中对应的名字
导入模块补充说明
- import与from...import...两者优缺点
- import句式
- 由于使用模块名称空间中的名字都需要模块名点的方式才可以用所以一不会轻易的被执行文件中的名字替换掉,但由于每次使用模块名称空间中的名字都必须使用模块名点才可以。
- from...import...句式
- 指名道姓的导入模块空间中需要使用的名字,不需要模块名点。但是容易跟着执行文件中名字冲突。
- 重复导入模块
- 起别名
- import wuyongerciyuan as wy
- from wuyongerciyuan import zhanglovewu as zz
- form a import name as n,func1 as f1
- 涉及到多个模块导入
- import a
- import wuyongerciyuan
- 如果模块功能相似度不高,推荐使用第一一种。相似度高可以使用第二种
- import a, wuyongerciyuan
循环导入问题
- 循环导入
- 两个文件直接彼此并且相互使用各自名称空间中的名字,贼容易报错
- 如何解决循环导入问题
- 确保名字在使用之前就已经准备完毕
- 我们以后在编写代码的过程中应该尽可能避免出现循环导入
判断文件类型
所有的py文件都可以直接打印_name_对应的值
当py文件是执行文件的时候_name_对应的值是_main_
当py文件是被带入文件的时候_name_对应的值是模块名
if _name_ == '_main_':
print('haha,我是执行文件可以运行这里的子代码')
上述脚本可以用来区分所在py文件内oython代码执行
使用场景
模块开发阶段
项目启动文件
'''
from a import * *默认是将模块名称空间中所有的名字导入
_all_ =['名字', '名字1'] 针对*可以限制拿的名字
'''
模块的查找顺序
- 内存
imprt aaa
import time
time.sleep
print(aaa.name)
aaa.func1()
- 内置
import time
print(time)
print(time.name)
'''
以后在自定义模块的时候尽量不要与内置模块冲突
'''
- 执行文件所在的sys.path(系统环境环境)
一定要以执行文件为准!!!
我们可以将模块所在的路也提娜佳到执行文件的sys.path中即可import sys
print(sys.path) # 列表
sys.path.append(r'D:\pythonProject03\day17\mymd')
import ccc
print(ccc.name)
绝对导入与相对导入
```python
"""
再次强调:一定要分清楚谁说执行文件!!!
模块的导入全部以执行文件为准
"""
绝对导入
from mymd.aaa.bbb.ccc.ddd import name # 可以精确到变量名
from mymd.aaa.bbb.ccc import ddd # 也可以精确到模块名
ps:套路就是按照项目根目录一层层往下查找
相对导入
.在路径中表示当前目录
..在路径中表示上一层目录
..\..在路径中表示上上一层目录
不在一句执行文件所在的sys.path,而是以模块自身路径为准
from. import b
相对导入只能用于模块文件中,不能再执行文件中使用
"""
相对导入使用频率较低,一般用绝对导入即可。结构更加清晰
"""
```
包
- 大白话:多个py文件的集合>>>:文件夹
- 专业:内部含有_init_.py文件的文件夹(python2必须要求、python3无所谓)