Python基础(第九章—高级编程)

Python基础(第九章—高级编程)_第1张图片
" 我在盛开的樱花下遇见你,从此命运不再属于自己 "

Python基础(内容基于逻辑教育Cheney课程)

  • 1、可迭代对象
  • 2、生成器
    • 2.1、生成器背景
    • 2.2、生成器语法及与列表推导式的比较
    • 2.3、生成器中元素有限
    • 2.4、生成器与函数
    • 2.5、生成器遍历
  • 3、迭代器
    • 3.1、迭代器概念
    • 3.2、列表迭代器及其next()方法
  • 4、推导式
    • 4.1、推导式概念及语法
    • 4.2、列表推导式举例
  • 5、面向对象
    • 5.1、面向对象概念
    • 5.2、类与对象

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、生成器背景

生成器背景

  1. 虽然能通过列表推导式创建一个列表
  2. 但是受到内存的限制、我们不能创建一个很大的列表
  3. 就比如说、创建一个有上百万个元素的列表、会占有很大的内存空间
  4. 而我们需要访问的只是其中几个元素、那么就造成了内存的浪费
  5. 为了实现对内存的优化(用几个元素就创建出几个元素)
  6. 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: 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

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、迭代器概念

迭代器概念

  1. 迭代器是访问集合元素的一种方式
  2. 迭代器是一个能记住遍历位置的对象
  3. 迭代器对象从集合的第一个元素开始访问
  4. 直到所有元素被访问结束
  5. 可以被next()函数调用并不断返回下一个值的对象称为迭代器(iterator)
  6. 生成器是可迭代的、也是迭代器
  7. 列表是可迭代的、但不是迭代器
  8. 通过iter()函数可以将可迭代的变成一个迭代器
  9. 可迭代对象实现了__iter()__方法
  10. 迭代器实现了__next()__方法和__iter()__方法

3.2、列表迭代器及其next()方法

%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

4、推导式

4.1、推导式概念及语法

推导式

  1. 分为列表推导式(使用最多)、字典推导式、集合推导式等
  2. 此文章主要阐述列表推导式
  3. 列表推导式是Python构建列表(list)的一种快捷方式
  4. 可以用简洁的代码以一个旧的列表为基础创建出一个新的列表
# 语法
[表达式 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新年好']

%31~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、面向对象概念

面向对象概念

  1. Python是一门面向对象编程语言
  2. 简而言之、所有操作都是围绕对象来进行的

5.2、类与对象

class Person():
    # 类名:Person
    name = "小涵"
    # 类中属性


person1 = Person()
# 类的实例化
print(person1.name)
# 调用类中属性
person1.name = "小绿"
# 修改类中属性
print(person1.name)
# 再次调用类中属性

# output:小涵
#         小绿

你可能感兴趣的:(Python,列表,python,生成器,数据结构)