生成器的send方法

在使用yield方法创建生成器时,不仅可以使用next方法进行取值,还可以通过send方法向生成器的内部传值

什么是send方法?

send方法相当于高级的next方法,send方法不仅可以通过yield方法取出生成器中的值,还可以向生成器中传值

send方法的工作步骤

由于生成器在执行过程中,不会直接执行,当使用next方法进行取值时才会执行,当遇到yield关键字时停止,并把yield中的值传递出来
首先,send方法会将外界的值传递进生成器内部,在由生成器中相应的变量进行接收
然后,生成器会向下执行,直到遇到下一个yield停止,并将yield后面的值返回出来 --> 相当于next方法
需要注意的是,由于生成器不会自动运行,只有在遇到next时才会向下执行,所以在遇到第一个yield之前不能使用send向生成器中传递值,或者只能传递None

案例:

persons = ['张三', '李四', '王五', '赵六', '钱七']

def order(persons):
for i in range(len(persons)):
if i == 0:
print('%s在面试' % persons[0])
else:
print('%s叫%s在面试' % (name, persons[i]))
print('%s面试完毕' % persons[i]) name = yield persons[i] obj = order(persons)
for i in range(len(persons)):
if i == 0:
p = obj.__next__()
else:
p = obj.send(p)
print('=============================')

  

递归函数

什么是递归函数?

-- 函数直接或者间接调用自身都叫递归函数
-- 回溯:通过条件找寻答案的过程
-- 递推:通过答案进行回推的过程

递归函数的特点:

-- 递归函数必须有出口
-- 递归函数进行回溯及递推时必须有规律

案例

# 获得第 count 个人的年纪
def get_age(count):
if count == 1:
return 58
# 第 九...一 个人 - 2
age = get_age(count - 1) - 2
return age age = get_age(3)
print(age)

 

匿名函数

什么是匿名函数?

-- 匿名函数就是不需要函数名的函数,该函数使用一次就会被回收。

匿名函数:

-- 匿名函数没有函数名
-- 匿名函数的关键字采用lambda
-- 关键字 lambda 与标识函数功能体 : 之间一定是参数,所以省略()
-- 匿名还是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了

匿名函数的形式:

lambda *args, **kwargs: '返回值'

-- 注意:
-- 参数的使用和有名函数一样,六种形参都支持
-- 返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象

实例

a = lambda *args, **kwargs: '返回值1', '返回值2'
print(a) # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')

匿名函数的应用

-- 匿名的函数经常会配合内置函数进行使用
-- 实例:

-- max、min、sorted函数
max(iter, lambda x: x)
min(iter, lambda x: x)
sorted(iter, fn, reverse)
-- map、reduce函数
map(lambda x: x * 2, [3, 1, 2])
reduce(lambda x, y: x * y, [3, 1, 2])

常用的内置函数

常用的内置函数及内置的的类等放在源码的buildin文件中,可以通过一个内置函数进入这个文件

与类型相关的

list() str() ord() chr() bool() int() ...

print(ord('A'))
print(chr(97))

进制转化

print(bin(10)) # 1010
print(oct(10)) # 12
print(hex(10)) # a print(0b1111) # 15
print(0o10) # 8
print(0x11) # 17

常用操作类的

range() len() iter() next() enumerate() id() type() print() input() open()  

原义字符串

print(r'a\nb')
print(ascii('a\nb'))
print(repr('a\nb'))

数学相关运算

abs() sum() max() min() pow() sorted()
print(abs(-1))
print(pow(2, 3)) # 2**3
print(pow(2, 3, 3)) # 2**3%3

  

生成器的send方法、递推函数、匿名函数及常用内置函数的更多相关文章

  1. Python-老男孩-01_基础_文件IO_函数_yield_三元_常用内置函数_反射_random_md5_序列化_正则表达式_time

    Python2.7 缩进统一: 约定  常量 大写 , 变量  小写 判断一个变量在内存中的地址,也能看出是不是一个值 id()函数 >>> x = 'abc' >>&g ...

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

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

  3. python之迭代器 生成器 枚举 常用内置函数 递归

    迭代器 迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值 with open('text.txt','rb',) as f: res = f ...

  4. python中常用内置函数和关键词

    Python 常用内置函数如下: Python 解释器内置了很多函数和类型,您可以在任何时候使用它们.以下按字母表顺序列出它们. 1. abs()函数 返回数字的绝对值. print( abs(-45 ...

  5. Python的常用内置函数介绍

    Python的常用内置函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.取绝对值(abs) #!/usr/bin/env python #_*_coding:utf-8_ ...

  6. Python基础(二)——常用内置函数

    1. 常用内置函数 (1)isinstance(object, classinfo) 用于判断一个对象是否为某一类型. object  是实例对象 classinfo 是基本类型如 int, floa ...

  7. 学习Python函数笔记之二(内置函数)

    ---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返 ...

  8. Python 基础之常用内置函数

    1.常用内置函数 (1)abs 绝对值函数 intvar = -9 res = abs(intvar)print(res) (2)round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数 ,则 ...

  9. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  10. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

随机推荐

  1. learing cbor protocol

    https://tools.ietf.org/html/rfc7049 https://github.com/panzidongfamily/tinycbor

  2. BIOS之于系统启动

    #BIOS之于操作系统 操作系统从开机通电到系统启动成功(执行main函数)分为3个步骤 启动BIOS,准备实模式下中断向量表和中断服务程序 从启动盘加载操作系统程序(包括boot镜像和root文件系 ...

  3. effective c++ (四)

    条款10:令operator=返回一个reference to *this 为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参,这是你为classes实现赋值操作符时应 ...

  4. GitLab 如何在 Web 界面中 Merge branch

    希望在 GitLab 中对 2 个 branch 进行合并,如何创建 Pull Request 并且如何进行合并呢? 在 GitLib 的 Web 界面中选择 Merge Requests 然后再界面 ...

  5. 图像傅里叶变换(快速傅里叶变换FFT)

    学习DIP第7天,图像傅里叶变换 转载请标明出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对 ...

  6. a a[0] &a &a[0]的理解

    数组中几个关键符号(a a[0] &a &a[0])的理解(前提是 int a[10])(1)这4个符号搞清楚了,数组相关的很多问题都有答案了.理解这些符号的时候要和左值右值结合起来, ...

  7. 2016 Multi-University Training Contest 3 部分题解

    1001,只要枚举区间即可.签到题,要注意的是输入0的话也是“TAT”.不过今天补题的时候却WA了好几次,觉得奇怪.原来出现在判断条件那里,x是一个int64类型的变量,在进行(x<65536* ...

  8. Ubuntu使用PBIS认证

    1:下载 https://github.com/BeyondTrust/pbis-open/releases wget https://github.com/BeyondTrust/pbis-open ...

  9. Java-JVM OutOfMemory 情况(JDK8)

    JVM 运行时内存结构(Run-Time Data Areas) 内存溢出分为两大类:OutOfMemoryError 和 StackOverflowError. 一.HeapOomError (JV ...

  10. Java-NIO 之 Buffer 与 Channel

    NIO:一种同步非阻塞的 I/O 模型,也是 I/O 多路复用的基础. 同步与异步 同步:发起一个调用后,被调用者未处理完请求之前,调用不返回. 异步:发起一个调用后,立刻得到被调用者的回应表示已接收 ...