美文网首页python复习100天
python复习第6天:迭代器与生成器

python复习第6天:迭代器与生成器

作者: 潮办公 | 来源:发表于2020-03-10 12:18 被阅读0次

title: python复习100天--第6天
date: 2020-03-10 14:00:24
tags:
- python
- 基础
categories: python复习
top: 7


迭代器与生成器

迭代器

  • 迭代可以理解为大箱子里面有小箱子,无数迭代
  • iter函数负责把数据转成迭代类型,即把原来的链式结构转成迭代结构(大箱子里面有小箱子)
  • next函数负责访问下一个元素
list1 = list(range(3))
iter1 = iter(list1)  # 列表转迭代
print(next(iter1))  # 访问下一个迭代元素
print(next(iter1))  # 访问下一个迭代元素
print(next(iter1))  # 访问下一个迭代元素
"""
# 输出结果
0
1
2
"""
  • 迭代器可以用for循环进行遍历
list1 = list(range(3))
iter1 = iter(list1)  # 列表转迭代
for i in iter1:
    print(i)
"""
# 输出结果
0
1
2
"""

生成器

  • 生成器是用来收集单个数据的,可以理解为单个箱子

  • 生成器收集完数据后程序继续运行,不会像return那样只能收集单个数据

  • 可以把生成器理解为单个箱子的迭代

  • 常用yield函数做生成器

def fun1():
    """
    定义一个简单的函数
    :return: 不用return,用yield的来收集数据
    """
    for i in range(10):
        yield i


s = fun1()
while True:
    print(next(s))
    
    
"""
# 输出结果
0
1
2
3
4
5
6
7
8
9
Traceback (most recent call last):
  File "/home/tlntin/PycharmProjects/study/第二天.py", line 12, in <module>
    print(next(s))
StopIteration
"""
  • 这里用的是while死循环遍历,当遇到错误的时候,自动退出。

函数

  • 可用用来实现特定功能的,可以防止出现大量重复代码

  • 方便代码的重复利用,使得代码更加简洁

  • 常用def开头,后面接函数名称和括号。

  • 函数内的代码需要用冒号,然后后面接缩进。

  • 调用函数的时候直接给出函数名加括号即可。

def fun1():
    """
    我是一个函数
    :return:
    """
    print('hello world')


fun1()  # 调用函数

"""
# 输出结果
hello world
"""

函数参数

  • 函数的参数一般在定义函数的括号内直接定义

  • 调用函数的时候也需要直接在函数名称后面的时候带上参数

def fun1(a, b):
    """
    我是一个函数
    用来计算长方体面积
    :return:
    """
    print('长方体面积为:', a*b)


fun1(2, 3)  # 调用函数

"""
# 输出结果
长方体面积为: 6
"""
  • 调用函数的时候也可以指定参数的值,如果不指定则按默认顺序传递值
def fun1(a, b):
    """
    我是一个函数
    用来计算长方体面积
    :return:
    """
    print('长为:{}, 宽为:{},长方体面积为:'.format(a, b), a*b)


fun1(b=2, a=3)  # 调用函数

"""
# 输出结果
长为:3, 宽为:2,长方体面积为: 6
"""
  • 默认参数,即可以在定义函数的时候事先给参数带一个默认值,这样在调用的时候可以给参数,也可以不给参数。
def fun(r, pi=3.14):
    """
    计算圆的面积
    :param r:圆的半径,float,int类型
    :param pi:圆周率,这里给了一个默认参数3.14
    :return:
    """
    s = pi * r**2
    print('圆的面积为:', s)


fun(2)
fun(2, 3.1415926)
"""
# 输出结果
圆的面积为: 12.56
圆的面积为: 12.5663704
"""
  • 收集参数,即在定义函数的时候不确定定义多少个参数,可以用收集参数来定义。
  • 收集参数常用*args,**args分别收集元组和字典。
def fun(*args):
    """
    展示收集参数收集元组
    :return:
    """
    print('你输入的参数有:', args)


fun(1)
fun(1, 2, 3)
"""
# 输出结果
你输入的参数有: (1,)
你输入的参数有: (1, 2, 3)
"""
def fun(**args):
    """
    展示收集参数收集元组
    :return:
    """
    print('你输入的参数有:', args)


fun(a=1, b=2, c=3)
"""
# 输出结果
你输入的参数有: {'a': 1, 'b': 2, 'c': 3}
"""

函数返回

  • 常用return来返回函数最终的结果,return之后,函数即停止,后面的内容不再运行。
def fun(r, pi=3.14):
    """
    计算圆的面积
    :param r:圆的半径,float,int类型
    :param pi:圆周率,这里给了一个默认参数3.14
    :return: 返回s,即圆的面积
    """
    s = pi * r**2
    return s
    print('我是return后面的内容')


s = fun(2)
s2 = fun(2, 3.1415926)
print(s, s2)
"""
# 输出结果
12.56 12.5663704
"""
  • 如果不写return,则函数默认返回None值
def fun(r, pi=3.14):
    """
    计算圆的面积
    :param r:圆的半径,float,int类型
    :param pi:圆周率,这里给了一个默认参数3.14
    :return: 返回s,即圆的面积
    """
    s = pi * r**2


s = fun(2)
s2 = fun(2, 3.1415926)
print(s, s2)
"""
# 输出结果
None None
"""
  • 也可以用yield进行返回,yield返回对象是一个生成器。即大箱子套小箱子。
  • yield后面的代码可以继续运行
def fun(r, pi=3.14):
    """
    计算圆的面积
    :param r:圆的半径,float,int类型
    :param pi:圆周率,这里给了一个默认参数3.14
    :return: 返回s,即圆的面积
    """
    s0 = pi * r**2
    yield s0
    print('我是yield后面的内容')
    s1 = s0 + 1
    yield s1


s_list = fun(4)
print(next(s_list))
print(next(s_list))
"""
# 输出结果
50.24
我是yield后面的内容
51.24
"""

匿名函数

  • python常用lambda函数创建匿名函数,即不需要用def定义函数名称而可以直接使用
  • lambda函数可以直接定义完后立即调用
fun1 = lambda x, y: x+y  # 定义一个lambda匿名函数,传给变量fun1暂时储存
s_list = fun1(1, 2)


def fun2(x, y):  # 这个和上面的lambda一样
    return x+y


s_list2 = fun2(2, 2)

print(s_list, s_list2)
"""
3 4
"""
  • lambda函数常用map函数混合使用。
list1 = list(range(1, 10))
list2 = list(map(lambda x: x**2, list1))  # 计算Lst1的元素的平方后的结果,返回一个map对象,转成List列表
print(list2)
"""
[1, 4, 9, 16, 25, 36, 49, 64, 81]
"""

相关文章

网友评论

    本文标题:python复习第6天:迭代器与生成器

    本文链接:https://www.haomeiwen.com/subject/uwhwdhtx.html