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

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

2020-01-02 | |  120 |   0

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

原文来自:CSDN      原文链接:https://blog.csdn.net/Web_Student/article/details/103793179


返回值

  • 函数并非总是将结果直接输出,相反,函数的调用者需要函数提供一些通过函数处理过后的一个或者一组数据,只有调用者拥有了这个数据,才能够做一些其他的操作。那么这个时候,就需要函数返回给调用者数据,这个就被称之为返回值,想要在函数中把结果返回给调用者,需要在函数中使用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))#输出1print(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的地方

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:python自学篇九[ 函数(一):参数+对象]

下一篇:python自学篇九[ 函数(三):变量作用域+ATM+5个小练习]

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...