1.生成器send方法

send的工作原理

1.send发生信息给当前停止的yield

2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止

例:

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

def order(persons):

  for i  in ragne(len(persongs)):

    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('=============================')

    

2.函数的递归

递归:

函数直接或间接调用本身,都称之为递归

回溯:找寻答案的过程

递推:推出答案的过程

前提条件:

1.递归必须有出口

2.递归回溯地推的条件一定有规律

例:

def get_age(count):

  if  count ==1

    return  58

  age = get_age(count -1)-2

  return age

age = get_age(3)

print(age)

例:

def  jiecheng(n):

  if n==1 or n ==0

    return 1

  j = n *jiecheng(n-1)

  return j

res = jiecheng (5)

print (res)

3.匿名函数

 def fn (*args,**kwargs):

  函数体

     return'返回'

匿名函数:

1.匿名函数没有函数名

2.匿名函数的关键字采用 lambda

3.关键字 lambda 与标识函数功能体 之间一定是参数,所以省略()

4.匿名函数是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了

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

注意:

1.参数的使用和有名函数一样,六种形参都支持

2.返回值必需明确成一个值,可以为单个值对象,也可以为一个容器对象

a = lambda *args,**kwargs:'返回值1','返回值2'

print(a)

(<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')

返回值1

print(a[0]())

 正确返回两个值: 主动构成成容器类型
lambda *args, **kwargs: ('返回值1', '返回值2')

4.max结合匿名函数工作原理

 1.max内部会遍历iter,将遍历结果一一传给lambda的参数x
 2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
 3.对外返回最大的遍历值
max(iter, lambda x: x)

 min工作原理一样,得到的是最小值

5.常用的内置函数

map(lambda x: x * 2, [3, 1, 2]) # 将遍历结果映射为任意类型值 [6, 2, 4]

from functools import reduce
reduce(lambda x, y: x * y, [3, 1, 2]) # 6

sorted(iter, fn, reverse)
dic = {
  'owen': (1, 88888),
  'zero': (2, 66666),
  'tom': (3, 77777),
}
res = sorted(dic, key=lambda k: dic[k][1])
print(res) # ['zero', 'tom', 'owen']

res = sorted(dic, key=lambda k: dic[k][1], reverse=True)
print(res) # ['owen', 'tom', 'zero']

 1.与类型相关的
 list() str() ord() chr() bool() int() ...

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

 2.进制转化
print(bin(10)) # 1010
print(oct(10)) # 12
print(hex(10)) # a

print(0b1111) # 15
print(0o10) # 8
print(0x11) # 17

 3.常用操作类的
 range() len() iter() next() enumerate() id() type() print() input() open()

 4.原义字符串
print(r'a\nb')
print(ascii('a\nb'))
print(repr('a\nb'))

 5.数学相关运算
 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. python3 第二十四章 - 函数式编程之Anonymous function(匿名函数)

    匿名函数指一类无须定义标识符的函数或子程序.Python用lambda语法定义匿名函数,只需用表达式而无需申明.lambda语法的定义如下: lambda [arg1 [,arg2, ... argN ...

  2. 15第十五章UDF用户自定义函数(转载)

    15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布

  3. 第十五章、Python多线程同步锁,死锁和递归锁

    目录 第十五章.Python多线程同步锁,死锁和递归锁 1. 引子: 2.同步锁 3.死锁 引子: 4.递归锁RLock 原理: 不多说,放代码 总结: 5. 大总结 第十五章.Python多线程同步 ...

  4. C++ Primer Plus学习:第十五章

    第十五章 友元.异常和其他 友元 友元类 表 0-1 class Tv { public: friend class Remote; } Remote类可以使用Tv的数据成员,Remote类在Tv类后 ...

  5. python 教程 第十五章、 结构布局

    第十五章. 结构布局 #!/usr/bin/env python #(1)起始行 "this is a module" #(2)模块文档 import sys #(3)模块导入 d ...

  6. 第十五章、Python多线程之信号量和GIL

    目录 第十五章.Python多线程之信号量和GIL 1. 信号量(Semaphore) 2. GIL 说明: 第十五章.Python多线程之信号量和GIL 1. 信号量(Semaphore) 信号量用 ...

  7. 第十五章、python中的进程操作-开启多进程

    目录 第十五章.python中的进程操作-开启多进程 一.multprocess模块 二.multprocess.process模块 三.Process()对象方法介绍 四.Process()对象属性 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 代码工程地址: https://g ...

  9. 【C++】《C++ Primer 》第十五章

    第十五章 面向对象程序设计 一.OOP:概述 面向对象程序设计(OOP)的核心思想是数据抽象.继承和动态绑定. 通过使用数据抽象,可以将类的接口和实现分离. 使用继承,可以定义相似的类型并对其相似关系 ...

  10. 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记

    第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ...

随机推荐

  1. JavaScript 将数组中具有相同值的对象 取出组成新的数组

    var arr=[{name:2,id:3},{name:2,id:4},{name:3,id:5},{name:3,id:6},{name:1,id:1},{name:1,id:2}]; // 传入 ...

  2. Vue在单独引入js文件中使用ElementUI的组件

    Vue在单独引入js文件中使用ElementUI的组件 问题场景: 我想在vue中的js文件中使用elementUI中的组件,因为我在main.js中引入了element包和它的css,并挂载到了全局 ...

  3. STM32中管脚利用

    如果利用4线SWD则剩余的调试引脚可以作为IO使用: void JTAG_Set(unsigned char Mode){ u32 temp; temp=Mode; temp<<=25; ...

  4. Hadoop Intro - Configure

    Hadoop学习(二) Hadoop配置文件参数详解   Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2 ...

  5. 【3dsMax安装失败,如何卸载、安装3dMax 2017?】

    是不是遇到MAYA/CAD/3DSMAX/INVENTOR安装失败?AUTODESK系列软件着实令人头疼,MAYA/CAD/3DSMAX/INVENTOR安装失败之后不能完全卸载!!!(比如maya, ...

  6. how to use Eclipse with Maven

    install Eclipse LUNA; download and unzip Maven; Eclipse=>window=>preference=>maven=>inst ...

  7. pat06-图4. Saving James Bond - Hard Version (30)

    06-图4. Saving James Bond - Hard Version (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作 ...

  8. Oracle安装后忘记用户名或密码+创建新登陆用户

    新安装的Oracle11g,不料在使用的时候没记住安装时的用户名和密码. 不用担心,打开sqlplus. 按如下步骤,新建一个登陆用户: 第一步:以sys登陆  sys/密码 as sysdba  此 ...

  9. oracle expdp impdp 数据泵方式

    一.不管导入还有导出都要先创建目录 1.登录plsql sqlplus/nolog conn sys/dbwork@orcl 2.创建目录 create directory my_dir as 'd: ...

  10. 超详细Hexo+Github博客搭建小白教程

    原文链接:超详细Hexo+Github博客搭建小白教程 去年9月的时候开始搭建了第一个自己的独立博客,到现在也稍微像模像样了.很多小伙伴应该也想过搭建一个自己的博客,网上也有一堆详细教程.我在此稍稍总 ...