" 我在盛开的樱花下遇见你,从此命运不再属于自己 "
Python基础(内容基于逻辑教育Cheney课程)
1、可迭代对象
迭代:利用 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]
2、生成器
2.1、生成器背景
生成器背景
- 虽然能通过列表推导式创建一个列表
- 但是受到内存的限制、我们不能创建一个很大的列表
- 就比如说、创建一个有上百万个元素的列表、会占有很大的内存空间
- 而我们需要访问的只是其中几个元素、那么就造成了内存的浪费
- 为了实现对内存的优化(用几个元素就创建出几个元素)
- Python就产生了一种一边循环一边计算的机制(生成器)
2.2、生成器语法及与列表推导式的比较
# 语法
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:<generator object <genexpr> at 0x0000019F6B830F10> <class 'generator'>
# 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
2.3、生成器中元素有限
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(停止迭代异常)
2.4、生成器与函数
%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
2.5、生成器遍历
# 原理
生成器对象使用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]
3、迭代器
3.1、迭代器概念
迭代器概念
- 迭代器是访问集合元素的一种方式
- 迭代器是一个能记住遍历位置的对象
- 迭代器对象从集合的第一个元素开始访问
- 直到所有元素被访问结束
- 可以被next()函数调用并不断返回下一个值的对象称为迭代器(iterator)
- 生成器是可迭代的、也是迭代器
- 列表是可迭代的、但不是迭代器
- 通过iter()函数可以将可迭代的变成一个迭代器
- 可迭代对象实现了__iter()__方法
- 迭代器实现了__next()__方法和__iter()__方法
3.2、列表迭代器及其next()方法
%1 列表迭代器类
list1 = list(range(1,6))
iterator = iter(list1)
print(type(iterator))
# output:<class 'list_iterator'>
# 列表迭代器类
%2 列表迭代器的next方法
print(iterator.__next__())
...print(iterator.__next__())
...print(next(iterator.__next__))
# output:1
# ...2
# ...3
4、推导式
4.1、推导式概念及语法
推导式
- 分为列表推导式(使用最多)、字典推导式、集合推导式等
- 此文章主要阐述列表推导式
- 列表推导式是Python构建列表(list)的一种快捷方式
- 可以用简洁的代码以一个旧的列表为基础创建出一个新的列表
# 语法
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
4.2、列表推导式举例
%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]
5、面向对象
5.1、面向对象概念
面向对象概念
- Python是一门面向对象编程语言
- 简而言之、所有操作都是围绕对象来进行的
5.2、类与对象
class Person():
# 类名:Person
name = "小涵"
# 类中属性
person1 = Person()
# 类的实例化
print(person1.name)
# 调用类中属性
person1.name = "小绿"
# 修改类中属性
print(person1.name)
# 再次调用类中属性
# output:小涵
# 小绿