迭代:利用 for 循环遍历从中拿取数据的过程
可迭代对象:简单的理解是可以用 for 循环遍历的对象、比如、列表(list)、字符串(str)、字典(dict)、元组(tuple)、集合(set)、生成器等
list1 = list(range(0,10))
list2 = []
for i in list1:
# 利用 for 循环遍历从 list1 中取出 0~9(list1称为可迭代对象)
if i % 2 == 1:
# 作判断、符合此条件执行下一步
list2.append(i)
# 给 list2 中增加元素
print(list2)
# output:[1, 3, 5, 7, 9]
生成器背景
# 语法
list1 = (表达式 for 变量 in 旧列表)
list1 = (表达式 for 变量 in 旧列表 if 条件)
%1 生成器类名
list2 = (i for i in range(1,21) if i % 3 == 0)
print(list2,type(list2))
# output: at 0x0000019F6B830F10>
# generator 生成器类名
%2 列表推导式与生成器的比较
list1 = [i for i in range(1,21) if i % 3 == 0]
# 列表推导式
list2 = (i for i in range(1,21) if i % 3 == 0)
# 生成器
print(list1)
# 列表推导式生成一个新的列表
print(next(list2))
print(next(list2))
...print(next(list2))
...print(next(list2))
...print(next(list2))
...print(next(list2))
# 生成器用 next(list1) 方法或 list1.__next__()
# 实现了用几个取几个
# output:[3, 6, 9, 12, 15, 18]
# 3
# 6
# ...9
# ...12
# ...15
# ...18
list2 = (i for i in range(1,10) if i % 3 == 0)
print(list2.__next__())
print(list2.__next__())
print(list2.__next__())
...print(list2.__next__())
# output:3
# 6
# 9
# ...StopIteration(停止迭代异常)
%1 return语句执行后退出当前函数
def fun():
i = 0
while True:
i += 1
return i
r = fun()
# 变量 r 接收函数的返回值
print(r)
# output:1
%2 yield语句(暂时阻碍程序)执行可以实现生成器迭代作用
def fun():
i = 0
while True:
i += 1
yield i
r = fun()
print(next(r))
print(r.__next__())
print(r.__next__())
print(r.__next__())
# output:1
# 2
# 3
# 4
# 原理
生成器对象使用next(list1)方法或list1.__next__()依次取出元素
for循环遍历可迭代对象也是调用了next()方法
def fun():
i = 0
while i < 10:
i += 1
yield i
r = fun()
list2 = []
for i in r:
list2.append(i)
print(list2)
...list1 = [i for i in r]
...print(list1)
# output:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# ...[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
迭代器概念
%1 列表迭代器类
list1 = list(range(1,6))
iterator = iter(list1)
print(type(iterator))
# output:
# 列表迭代器类
%2 列表迭代器的next方法
print(iterator.__next__())
...print(iterator.__next__())
...print(next(iterator.__next__))
# output:1
# ...2
# ...3
推导式
# 语法
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
%1 for循环加条件语句基于旧列表创建出新列表
list1 = ["James","Jane","Sam","Jarry","Ben"]
def fun():
new_list = []
for name in list1:
if len(name) > 3:
new_list.append(name)
return new_list
print(fun())
# output:['James', 'Jane', 'Jarry']
%2 列表推导式基于旧列表创建出新列表
list1 = ["James","Jane","Sam","Jarry","Ben"]
list2 = [name + "新年好" for name in list1 if len(name) > 3]
print(list2)
# output:['James新年好', 'Jane新年好', 'Jarry新年好']
%3 求1~20之间能被3整除的数、并用一个列表装起来
list1 = [i for i in range(1,21) if i % 3 == 0]
print(list1)
# output:[3, 6, 9, 12, 15, 18]
面向对象概念
class Person():
# 类名:Person
name = "小涵"
# 类中属性
person1 = Person()
# 类的实例化
print(person1.name)
# 调用类中属性
person1.name = "小绿"
# 修改类中属性
print(person1.name)
# 再次调用类中属性
# output:小涵
# 小绿