一,推导式
1,推到表达式(python特有)
# 创建一个1到10列表
list_a = [for i in range(1, 11)]
print(list_a)
1到10的列表
list_a = [i for i in range(1,11)] # 会自动创建一个1到10的列表
print(list_a)
# for 循环下面的代码块移到for的前面,并且这个推导式会把i的每一次值保留
1到10,偶数的列表
# 创建一个列表,让这个列表里面的元素是1到10的偶数
list_a = [i for i in range(1, 11) if i % 2 == 0]
print(list_a)
# 有if判断,判断句写在for循环后面,i会根据i的真假保留值
1到10,基数变字符串,偶数扩大10倍的列表
list_a = [i*10 if i % 2 == 0 else str(i) for i in range(1, 11)]
print(list_a)
# if条件判断里面有else的话,写成三目运算放在for循环前面
列表推导式,主要完成不那么复杂的功能,推导式的代码必须写成一行!!!
2,字典推导式
# 创建一个字典,以键值对的形式存在
dict_a = {i: j for i, j in [('a', 1), ('b', 2), ('c', 3)]}
print(dict_a)
# 会把列表里面的元组的值分别赋值给i,j并生成一个字典
二,迭代器
-
实现一个迭代器之前必须有一个可迭代对象
-
什么对象是可迭代对象:如果一个对象实现了
__iter__
这个魔法方法
1,创建一个列表迭代器
迭代器:实现了__iter__
和__next__
方法的对象
a = [1, 2, 3, 4, 5] # 创建一个可迭代对象
b = iter(a) # 把a通过iter这个函数转换成迭代器,赋值给b
print(b)
<list_iterator object at 0x0000022BA5DCB080> # 列表迭代对象
"""
迭代器本身需要支持这两种方法才叫迭代器:
1,iterator.__iter__()
2,iterator.__next__()
生成迭代器的函数:
1,iterator = iter(a)
2,iterator = a.__iter__()
在迭代器里面取值:
1,next(iterator)
2,iterator.__next__()
注意,如果迭代器取值完之后,会返回StopIteration错误
"""
可迭代对象和迭代器的区别:
1,可迭代对象里面取出元素,不是真正意义上的取出来,还是存在的
2,迭代器里面取元素就是直接把他取出来,取走了就没了
三,生成器
- 用列表推导式生成的是列表,用元组推导式生成的是生成器
- 生成器属于迭代器,它实现了
__iter__
和__next__
这两个魔法方法
1,创建一个生成器
a = (i for i in range(1, 11))
print(a)
<generator object <genexpr> at 0x0000023A61639620>
# 用元组推导式实现了一个生成器对象
2,实现了yield关键字的生成器函数
def func(num):
a = 0
while a<num :
yield a
a += 1
# 这个函数使用了yield关键字,这是一个生成器函数,返回的对象是生成器对象
"""
1,返回这个函数对象
yield一个对象: 2,暂停这个函数
3,等待下次next重新激活函数
"""
四,模块
- 什么是模块? .py的文件
1,在一个文件里面使用同一个目录里另外一个文件的功能!
只导入一个工具箱里面的一个工具,三种导入方式:
1,from 工具箱 import 工具1,工具2,工具3
2, from 工具箱 import * 导入所有工具
3,import pandas as pd 给模块取别名
2,如果一个模块的函数名字太长,取别名
import pandas as pd
from 模块 import 这个模块的名字真长真恶心心啊 as func
3,如果两个文件不在同一个目录下
imoprt sys
print(sys.path) # sys.path 打印出python的模块所在地
sys.path.append(r'D:/python/PycharmCode/test/test') # 例子
#只要导入模块所在的目录就可以了,不用精确到文件
python在导入一个文件的时候回去sys.path里面去找,找到导入,找不到报错
4,导入模块时模块有红线
五,包和包管理
1,包的概念
1.1,把很多模块放到一个文件夹里面,就可以形成一个包
1.2,当一个文件夹里面有个__Iinit__.py
的文件,文件夹名就是包名
1.3,在pycharm里创建一个包
2,包管理
当很多模块放在文件夹中时,为了方便应用包中的模块,引入了包管理
3,导入包里面的模块