python入门到秃顶(11):迭代器、生成器模块及包
2020-07-12 11:21
阅读数 14
<>一,推导式
<>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)
# 列表迭代对象
""" 迭代器本身需要支持这两种方法才叫迭代器: 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) at
0x0000023A61639620> # 用元组推导式实现了一个生成器对象
<>2,实现了yield关键字的生成器函数
def func(num): a = 0 while a
这个函数使用了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,导入包里面的模块
<>