yield的功能:
  1. 与return类似,都可以返回值,不一样在于,yield可以返回多个值而且可暂停,再次执行可继续下一步操作,return到了就停止不在继续运行。
  2.为封装好的的函数能够使用__iter__和__next__方法,
  3.遵循迭代器的取值方式 .__next__(),触发函数的执行和函数的保存都是通过yeild保存的。  .
 
一:yield的表达式形式
def foo():
print('starting')
while True:
x=yield #yield的表达式形式
print('value : ',x) g=foo()
next(g) #next(g)==g.semd(None)
g.send() #send的效果:.将携带的值传给yield,注意是yiled,而不是x,然后yiled赋值给x .send()方法具有和next()方法一样的功能,也就是继续执行,直到碰到yield结束.

yield表达式形式(例如: x = yield)下,生成器会有一个send的操作:  

#send的效果:
# 1:先从为暂停位置的那个yield传一个值,然后yield会把值赋值x
# 2:与next的功能一样
  #3: send传多个值时,必须以元组的形式
def foo():
print('starting')
while True:
x=yield
print('value:',x) foo()
#next(g)
# g.send() foo()#不执行print('starting'),因为定义该函数,解释器在检测语法的时候,检测到有yield,那么在执行该函数的时候就不会打印。 g.send() ###send 有///传值+next的功能,传值给yield,再赋值给x,再接着往后走,直到下一个yield停止。
g.send-----`>首先要给一个初始化的值,才能再g.send()传值

案例:

def good(func):
def good1(*args,**kwargs):
g=func(*args,**kwargs)
next(g)
return g
return good1 @good
def eater(name):
print('%s starting to eat '%name)
food_list=[]
while True:
food=yield food_list
food_list.append(food)
print('%s start to eat %s'%(name,food))
print(food_list) m=eater('jason')
m.send('火腿')

注意点:

既然send()方法有和next一样的作用,那么我们可不可以这样做:

def foo():
while True:
x = yield #函数有yield,函数执行的结果就是生成器,即foo()就是生成器。而要执行的话就需要next(g).
print("value:",x) g = foo()
g.send() #执行给yield传值,这样行不行呢?

很明显,是不行的;

TypeError: can't send non-None value to a just-started generator

错误提示:不能传递一个非空值给一个未启动的生成器。

  也就是说,在一个生成器函数未启动之前,是不能传递数值进去。必须先传递一个None进去或者调用一次next(g)方法,才能进行传值操作。

三:内置函数

abs(x)            #取绝对值,如果是复数,返回值是该复数的模
divomd(x,y) #函数完成除法运算,返回商和余数
isinstance(object,type) #判断对象是不是此类型
chr() #函数返回ASCII码对应的字符串
ord() #函数返回字符串对应的ASCII码
max(),min() #返回函数的最大值与最小值(字母:z>a)

内置函数实例/:

func2=lambda x:x**  #匿名函数:相当于return x**

# map:映射
# l=[,,,]
# m=map(lambda x:x**,l) #reduce:合并
from functools import reduce
print(reduce(lambda x,y:x+y,range(),)) # filter:过滤
# names=['alex_sb','yuanhao_sb','wupeiqi_sb','egon']
# print(list(filter(lambda name:name.endswith('_sb'),names))) # #sorted 升序
# l=[,,,,-]
# print(sorted(l)) #从小到大
# print(sorted(l,reverse=True)) #从大到小
# s='hello'
# l=[,,]
#
# for i in zip(s,l): #拉链,s,l 一一随对应
# print(i) l=['a','b','c']
for i in enumerate(l):
print(i) #
=========结果==========
(, 'a')
(, 'b')
(, 'c')

yield的表达式形式与内置函数的更多相关文章

  1. python--表达式形式的yield、面向过程编程、内置函数

    yield的表达式形式 def init(func): def wrapper(*args, **kwargs): g = func(*args, **kwargs) next(g) return g ...

  2. python中的运算符及表达式及常用内置函数

    知识内容: 1.运算符与表达式 2.for\while初步了解 3.常用内置函数 一.运算符与表达式 python与其他语言一样支持大多数算数运算符.关系运算符.逻辑运算符以及位运算符,并且有和大多数 ...

  3. Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分

    生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...

  4. python基础之生成器表达式形式、面向过程编程、内置函数部分

    生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...

  5. day22 yield的表达式的应用,面向过程编程,内置函数前几个

    Python之路,Day10 = Python基础10 生成器表达式: (i for i in range(10) if i > 5)os.walk(r'文件路径')返回一个迭代器, 第一次ne ...

  6. CSIC_716_20191114【生成器、匿名函数、内置函数、三元表达式、列表生成式、生成器表达式】

    生成器: 函数与yield连用,凡是函数中有yield的,调用该函数的时候均不会立即执行,而是会返回一个生成器. 生成器本质上是一个迭代器,需要通过    [生成器.__next__()]或者[nex ...

  7. 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数

    lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...

  8. lambda表达式、内置函数、进制和文件操作

    lambda表达式 定义函数(普通方式)def f1(): return 123 f2 = lambda : 123 def f3(a1,a2): return a1+a2 定义函数(lambda表达 ...

  9. python 内置函数和表达式

    对于简单的函数来说,可以使用类似于三元运算来表示,即: lambda表达式 格式: lambda [arg1[, arg2, ... argN]]: expression   先来看看三元表达式 #普 ...

随机推荐

  1. centos6.9系列LNMP环境的安装

    一.Nginx 1.先解决Nginx的依赖关系: yum install -y pcre-devel openssl-devel 2.安装wget:sudo yum -y install wget 3 ...

  2. future then

    import 'dart:async'; main(){ Future(()=>a1()) .then((x)=>a2(x)) .then((x)=>a3(x)) .then((x) ...

  3. Ubuntu 无界面使用selenium chrome + headless

    1. 安装 selenium : sudo pip install selenium 2. 安装 chromdriver: 进入 淘宝镜像源 下载 chromdriver, 可以查看 notes.tx ...

  4. ORA-28002密码失效问题解决

    问题:提示ORA-28002解决: 第1种方法:数据库级别,需要重启查看过期时间: sql>SELECT * FROM dba_profiles WHERE profile='DEFAULT' ...

  5. SPOJ COT Count on a tree(树上主席树 + LCA 求点第k小)题解

    题意:n个点的树,每个点有权值,问你u~v路径第k小的点的权值是? 思路: 树上主席树就是每个点建一棵权值线段树,具体看JQ博客,LCA用倍增logn求出,具体原理看这里 树上主席树我每个点的存的是点 ...

  6. 数据结构|-用C#实现一个简单的链表

    我们知道C#中是没有链表的,我们可以自己实现一个 整个单链表能实现的功能有: 功能 方法 返回值 备注 获取链表长度 GetLength() int 返回值是链表长度 清空链表 Clear() voi ...

  7. Java问题解决:springboot启动出现-Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package

    参考资料: http://www.mamicode.com/info-detail-2101273.html https://blog.csdn.net/u012834750/article/deta ...

  8. 实验九 FBG 团队项目需求改进与系统设计

    任务一 A.<项目需求规格说明书>分析 根据老师的指导以及本周所学的OOA,分析改进上周编写的<项目需求规格说明书>,发现需求项目书UML图例描述不够完善,仅仅是用例图没办法更 ...

  9. Spring Boot监控与管理的实现

    认识Actuator 在SpringBoot应用中引入spring-boot-starter-actuator依赖,它可以为开发团队提供系统运行的各项监控指标. 在项目中引入依赖配置如下: appli ...

  10. 【架构设计】Android:配置式金字塔架构

    最近做一个项目,在项目搭建之前,花了些许时间去思考一下如何搭建一个合适的架构.一开始的构思是希望能合理的把应用的各部分进行分离,使其像金字塔一样从上往下,下层为上层提供功能. 在平常项目中,总是有很多 ...