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 先来看看三元表达式 #普 ...
随机推荐
- 火狐开发----如何快速的安装火狐XPI文件
第一步:火狐的自动安装扩展程序,https://addons.mozilla.org/zh-CN/firefox/addon/autoinstaller/ 第二步:安装wget工具,这个Linux应该 ...
- deepin 安装scrapy安装出错:fatal error: Python.h 的解决办法
环境deepin Linux 15.7 Python3.6.5 今天重新装了deepin系统,需要重新安装scrapy,直接pip了一下,没成. 报错:fatal error: Python.h: 没 ...
- centos6.9 PHP的编译安装并连接nginx
1.安装yum -y install libxml2-devel openssl-devel bzip2-devel libmcrypt-devel 解决php包的依赖关系,可能libmcrypt会报 ...
- websocket --- 05 . http与websocket
一.http协议 1.基于 TCP 协议 2.一次请求 一次响应 断开 3.客户端永远处于主动状态 4.服务器永远处于被动状态 5.Http无状态 - 在服务器不保存客户端的信息 6.服务器无法主动找 ...
- 第一次远程ubuntu用c写Hello Word出现的问题
2019-03-26 21:48:48 之前已经学过c语言,但是一直是在win10上用VC++6.0来写代码的,现在想尝试在linux下用c语言 其实主要目的是来学习linux 1.问题: 在ubun ...
- 6、Docker存储卷
Why Data Volumes? 来自马哥教育 Data volumes Volume types 绑定挂载卷:在宿主机和容器上各指明绑定路径才能进行绑定. docker管理卷:在容器内指定挂载 ...
- mongodb在ubuntu下无法打开的问题
通过查询大概知道了是非正常关闭,mongod.lock的事,ubuntu的mongod.lock在/var/lib/mongodb中,删除之后即可重新打开.
- Inception部署
Inception是集审核.执行.回滚于一体的一个SQL自动化运维系统,基于MySQL代码修改,官方文档地址:https://mysql-inception.github.io/inception-d ...
- vivo 1805的usb调试模式在哪里,开启vivo 1805usb调试模式的流程
经常我们使用安卓手机通过数据线连接上PC的时候,如果手机没有开启usb调试模式,PC则没办法成功识别我们的手机,部分软件也没办法正常使用,此情况我们需要找方法将手机的usb调试模式打开,下面我们讲解v ...
- 雷林鹏分享:Laravel 安装
前面我们介绍我了 composer安装,这里我们接着来介绍 Laravel框架的安装. 这里我们安装的是laravel 4 项目下载地址:https://github.com/laravel/lara ...