生成器函数进阶

  1.生成器函数进阶(一)

 1 # 生成器函数进阶
 2
 3 def generator():
 4     print(123)
 5     num = yield 1   # 当第一个__next__发生时,yiled 1先被执行,被返回,停在了这里,之后当send来了后,send的参数先赋值给了yield的左值,之后再执行下一个yield之前的代码
 6                     # send()获取yield值之前,会给上一个yield的位置传递一个参数数据,这个数据可以被上一个yield的左值接收
 7                     # 使用生成器的send()方法,就是在触发yield时,会将send传递过去的参数赋值到上一个yield的左值位置,然后在执行上一次yield和本次触发yield之间的代码
 8     print(‘----‘, num)
 9     print(456)
10     yield 2
11
12 g = generator()
13 ret = g.__next__()
14 print(‘**‘, ret)
15 # send()调用后,会在获取下一个yield值之前,会给上一个yield的位置传递一个参数数据,这个数据可以被上一个yield的左值接收
16 ret = g.send(‘hello‘)   # ---- hello\n456  和__next__效果类似,只不过多了一个将参数赋值给了上一个yield,可以赋值给上一个yield的左值
17 print(‘**‘, ret)

原文地址:https://www.cnblogs.com/whylinux/p/9589128.html

时间: 2024-09-30 23:27:52

生成器函数进阶的相关文章

生成器函数的进阶和表达式and各种推导式

生成器函数的进阶 send的效果与作用范围和next一模一样 send获取下一个值的效果和next基本一致 第一次不能用send 函数中的最后一个yield不能接收新的值 只是再获取下一个值的时候,给上一个yield的位置传递一个数据 使用send的注意事项 #第一次使用生成器的时候,是用next获取下一个值 #最后一个yield不能接收外部的值 def generator(): print(123) content = yield 1 print('=======',content) prin

python开发函数进阶:可迭代的&迭代器&生成器

一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的   iterable#str list tuple set dict#可迭代的 --对应的标志 __iter__ 2.判断一个变量是不是一个可迭代的 # print('__iter__' in dir(list))# print('__iter__' in dir([1,2,3])) 3.可迭代协议--凡是可迭代的内部都有一个__iter__方法 二,迭代器 1.将可迭代的转化成迭代器 1 #!/usr/bin/env python 2

Python函数进阶:闭包、装饰器、生成器、协程

返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包功能,很多高级应用都会依靠闭包实现. 一般专业文献上对闭包的定义都比较拗口,比如:“将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包.” 其实,简单来说,你可以将闭包看成是一个轻载的类,这个类只有一个函数方法,并且只有为数不多的几个成员变量. 闭包的优点是:实现起来比类稍微轻巧一

函数—函数进阶(二)

函数-函数进阶(二) 函数-函数进阶-列表生成式 1 #列表回顾 2 name = [2,5,7,9,4] 3 print(name) 4 for i in name: 5 print(i) 6 #结果为: 7 # [2, 5, 7, 9, 4] 8 # 2 9 # 5 10 # 7 11 # 9 12 # 4 13 14 #枚举 15 for index,i in enumerate(name): 16 print(index,i) 17 #结果为: 18 # 0 2 19 # 1 5 20

第五篇 函数进阶

目录 第五篇 函数进阶 一 闭包函数 二 装饰器 三 迭代器 四 三元表达式 五 列表推导式 六 字典生成式 七 生成器 八 递归 九 匿名函数 十 内置函数 第五篇 函数进阶 ==回顾基础== 函数对象:可以将定义在函数内的函数返回到全局使用,从而打破函数的层级限制. 名称空间与作用域:作用域关系在函数定义阶段时就已经固定死了,与调用位置无关,即在任意位置调用函数都需要跑到定义函数时找到作用域关系. 一 闭包函数 闭包 闭就是封闭(函数内部函数),包就是包含(该内部函数对外部作用域而非全局作用

ES6生成器函数generator

generator是ES6新增的一个特殊函数,通过 function* 声明,函数体内通过 yield 来指明函数的暂停点,该函数返回一个迭代器,并且函数执行到 yield语句前面暂停,之后通过调用返回的迭代器next()方法来执行yield语句.如下代码演示: function* generator() { yield 1; yield 2; yield 3; } var gen = generator(); 如上代码:generator函数的调用方法与普通函数一样,也是在函数名后面加上一对圆

Day 21 三元表达式、生成器函数、列表解析

知识点程序: 1 #! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # __author__ = "DaChao" 4 # Date: 2017/6/16 5 6 l = [i for i in range(100) if i%2 > 0] 7 print(l) 8 9 ########################### 10 #生成器 generator!!! 模拟tail grep功能 11 ##############

递归和生成器函数

递归 如果函数包含了对其自身的调用,该函数就是递归.递归广泛应用于语言识别和使用递归函数的数学应用中.例如:斐波那契数列和求阶乘等.下面就上面两种使用举例: 斐波那契数列: In [12]: def fib(n): if n==0: return 1 if n==1: return 1 return fib(n-2)+fib(n-1) In [18]: fib(10) Out[18]: 89 阶乘: In [19]: def fn(n): ....: if n==0: ....: return

迭代器和生成器函数

引入: l = [1,2,3,4,5] s = {1,2,3,4} for i in l: print(i) 如果代码是: for i in 50: print(i) 这个运行不了.输出结果是 'int' object is not iterable iterable是可迭代的意思. 哪些可以迭代呢?这些可以str.list.tuple.set.dic等 可迭代的标志是  _iter_. 那我们如何判断是否可以迭代呢? print('__iter__' in dir([1,2,3])) 双下划线