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的表达式形式与内置函数的更多相关文章
- python--表达式形式的yield、面向过程编程、内置函数
yield的表达式形式 def init(func): def wrapper(*args, **kwargs): g = func(*args, **kwargs) next(g) return g ...
- python中的运算符及表达式及常用内置函数
知识内容: 1.运算符与表达式 2.for\while初步了解 3.常用内置函数 一.运算符与表达式 python与其他语言一样支持大多数算数运算符.关系运算符.逻辑运算符以及位运算符,并且有和大多数 ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...
- day22 yield的表达式的应用,面向过程编程,内置函数前几个
Python之路,Day10 = Python基础10 生成器表达式: (i for i in range(10) if i > 5)os.walk(r'文件路径')返回一个迭代器, 第一次ne ...
- CSIC_716_20191114【生成器、匿名函数、内置函数、三元表达式、列表生成式、生成器表达式】
生成器: 函数与yield连用,凡是函数中有yield的,调用该函数的时候均不会立即执行,而是会返回一个生成器. 生成器本质上是一个迭代器,需要通过 [生成器.__next__()]或者[nex ...
- 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数
lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...
- lambda表达式、内置函数、进制和文件操作
lambda表达式 定义函数(普通方式)def f1(): return 123 f2 = lambda : 123 def f3(a1,a2): return a1+a2 定义函数(lambda表达 ...
- python 内置函数和表达式
对于简单的函数来说,可以使用类似于三元运算来表示,即: lambda表达式 格式: lambda [arg1[, arg2, ... argN]]: expression 先来看看三元表达式 #普 ...
随机推荐
- linux awk用法
awk是一个强大的文本分析工具,在对数据进行分析并生成报告时显得尤为强大. 使用方法:awk [options] 'BEGIN{ commands } pattern{ commands } END ...
- JDK一键部署, 新添加进度条
JDK部署, 脚本与JDK安装包放在同一目录 然后执行 source ./jdk.sh 稍等进度条100%即可 #******************************************* ...
- 算法(第四版)C# 习题题解——2.4
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...
- centos7 升级内核
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-rel ...
- java.lang.IllegalStateException: getWriter() has already been called for this response
出现此异常的三种可能: 1.通过response.reset(); 刷新可能存在一些未关闭的getWriter(). 来源:http://blog.csdn.net/wonder4/article/ ...
- C# 数组与集合的区别
数组:声明数组的时候必须指定数组的长度.数组在内存中是连续的,索引速度很快,赋值和修改也很简单. 数组的容量是固定的,您只能一次获取或设置一个元素的值,而ArrayList或List的容量可根据需要自 ...
- Java面向对象内存分析
title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...
- python对Excel表格操作
操作场景,给一个Excel表格随机生成10万个手机号码 python中常见的对Excel操作模块 xlwt module 将数据写入Excel表 xlrd module 读取Excel表格 xlsxw ...
- Unity日常记录 - QualitySettings 性能设置
unity打包时,可通过QualitySettings优化图像性能,这是最常设置也是最明显的图像性能体现 设置图形质量的水平,一般来说,质量是以牺牲性能为代价的,所以最好不要追求移动设备或旧硬件的最高 ...
- grep 从文件内容中查找
grep -rin [查找目标] [查找范围] 例子:在当前目录下的文件内查找test字符串 grep -rin test ./