python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器]

这篇博客介绍了Python中函数的返回值,包括return语句及其使用,函数类型的区别。重点讲解了yield,阐述了其如何将函数转化为生成器,实现延迟操作和节省资源。此外,还详细解释了迭代器的概念和操作,以及生成器的运用,并提到了生成器的send()方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python基础系列:
python自学篇一[ Anaconda3安装 ]
python自学篇二[ pycharm安装及使用 ]
python自学篇三[ 判断语句if的使用 ]
python自学篇四[ 基本数据类型和字符串常用处理 ]
python自学篇五[ 列表 ]
python自学篇六[ 元组 ]
python自学篇七[ 字典+深拷贝与浅拷贝 ]描述
python自学篇八[ 循环:while+for+pass+range()+推导式 ]
python自学篇九[ 函数(一):参数+对象 ]
python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器 ]
python自学篇九[ 函数(三):变量作用域+ATM+5个小练习 ]
python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数 ]
python自学篇十[ 面向对象 (一) :面向对象概念+定义类+练习一]
python自学篇十[ 面向对象 (二) :继承+多继承+类属性+实例属性]
python自学篇十[ 面向对象 (三) :访问限制+类方法+静态方法]
python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python自学篇十一[ 模块简介+模块制作+dir()函数+标准模块+包]
python自学篇十二[ 文件:打开+读取+写入+3个习题]

返回值
  • 函数并非总是将结果直接输出,相反,函数的调用者需要函数提供一些通过函数处理过后的一个或者一组数据,只有调用者拥有了这个数据,才能够做一些其他的操作。那么这个时候,就需要函数返回给调用者数据,这个就被称之为返回值,想要在函数中把结果返回给调用者,需要在函数中使用return。
  • 函数的返回值
    return关键字实现
return语句
  • return语句用于退出函数,选择性的向调用者返回一个表达式。直接return的语句返回None。
def max(x,y):
    if x >y:
        return x  #结束函数的运行 并且将结果返回给调用的地方
    else:
        return y
        print(y)  #没有执行print
        #后面的代码不会执行
#调用函数  接受返回值
# num = max(1,2)  #声明一个变量num 接受调用函数后的返回值
# print(max(1,2))  #观察接受的返回值   返回值会返回到调用的地方
  • return返回多个值
def sum(x,y):
    return x,y
函数类型
  • 无参数,无返回值的函数
  • 无参数,有返回值的函数
  • 有参数,无返回值的函数
  • 有参数,有返回值的函数
yield

yield 的作用就是把一个函数变成一个generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个生成器,如调用函数,不会执行该函数,而是返回一个iterable迭代对象( 可以用for in 遍历得对象度可以叫做是可迭代对象:Iterable)!

使用生成器可以达到延迟操作的效果,所谓延迟操作就是指在需要的时候
产生结果而不是立即产生就结果,节省资源消耗,和声明一个序列不同的是
生成器,在不使用的时候几乎是不占内存的。

  • 区别:
    与return类似,都可以返回值,但不一样的地方,yield可以返回多次值,而return只能返回一次。
迭代器
  • 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式
  • 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束
  • 迭代器只能往前不会后退。 迭代器有两个基本的方法:iter()next()
  • 字符串,列表或元组,集合对象都可用于创建迭代器
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
print (next(it)) # 输出迭代器的下一个元素 1
print (next(it))
生成器(generator)
  • 使用了 yield 的函数被称为生成器
  • 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器
  • 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次从当前位置继续运行
  • 注意:可以通过for循环或者手动调用 Xun(5) 的 next() 方法
a = (x for x in range(10000000))  #不是元组推导式
print(a) #这里不会输出
print(next(a))#输出0
print(next(a))#输出1
print(next(a))#输出2
print(next(a))#输出3
#每执行一次print(next(a))就依次输出一个元素
生成器-send(generator)
  • a = yield 1 这个表达式,如果这个表达式只是x = 1,相信每个人都能理解是把1的值赋值给了x.
  • 而现在等号右边是一个yield 1,所以先要执行yield 1,然后才是赋值.
  • yield把1值返回到了调用者那里,因为执行等号右边的yield就是暂停,所以不会对a赋值
  • 那这个表达式的下一步操作:赋值,却换句话说a = yield 1 只执行了一半而send()里面的值的作用是把值传进当前的yield.
'''
    send使用
'''
def gen():
    i = 0
    while i < 5:
        temp = yield i  #不是赋值操作
        #使用了yield之后是一个生成器
        print(temp)   #因为 yield 之后返回结果到调用者的地方,暂停运行 ,赋值操作没有运行
        i+=1
a = gen()
print(next(a))
print(next(a))
print(a.send('王大锤'))  #可以将值发送到 上一次yield的地方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值