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. ssh 免密码登录(设置后仍需输密码的原因及解决方法)

    按操作步骤操作不行的最可能原因是:文件权限,不论是a机还是要访问的b机的文件的权限都要改成对应的700,600:必须严格是这个权限,否则会出现设置免密fail的情况. serverA 免密码登录到 s ...

  2. 【awk】用awk将Fasta文件序列变成一行

    awk: awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" &q ...

  3. 《一些神奇的JS功效》

    1: async 异步回调 (ES6) async function test(){ console.log("hello wolrd"); } test().then(funct ...

  4. javascript自定义一个全类型读取的函数

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.因为我们知道,在JavaScript中有自带的方法可以读取类型,但是不很全面,今天来分享下如何自己定义一个函数,将所有传入参数的类型给打印出来, ...

  5. CF932G Palindrome Partition

    思路 首先把字符串变为\(S[1]S[n]s[2]s[n-1] \dots\) 这样原来的一个合法的划分方案就变成了用k个长度为偶数的回文子串划分的方案, 然后直接DP,对i位置,可转移的位置就是它的 ...

  6. [CodeForce 450A] Jzzhu and Children

    题目链接:http://codeforces.com/problemset/problem/450/A /* * 计算一个人要是拿足够离开需要排多少次队,选排的次数多的那个人,如果两个人排的次数相同, ...

  7. Nodejs运行错误小结

    (迁移自旧博客2017 04 15) 在使用过程中会遇到一些问题,学习过程中不定期更新. 问题一 错误如下 **events.js:72 throw er; // Unhandled 'error' ...

  8. 后台启动mysql

    https://blog.csdn.net/codemacket/article/details/77719323

  9. PHP curl Post请求和Get请求~

    //获取的参数 $api_key = '8a82d53a57b06c1d835d129f7e43d49c'; $orderNum = pdo_fetch('select ddlm_order_no f ...

  10. filesystem type ntfs not configured in kernel

    移动硬盘是NTFS格式的,挂载时候kernel不支持这格式 出现:filesystem type ntfs not configured in kernel 解决:通过sudo yum install ...