day-15递归与函数
生成器send方法
send的工作原理
1.send发生信息给当前停止的yield
2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止
# 案例:
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('=============================')
递归
递归:
函数直接或间接调用本身,都称之为递归
回溯:找寻答案的过程
递推:推出结果的过程
前提条件:
1.递归必须有出口
2.递归回溯递推的条件一定有规律
# 案例一:获得第 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)
# 案例二:求n的阶乘 5! = 5 * 4 * 3 * 2 * 1 = 120
# 5! = 5 * 4!
# 4! = 4 * 3!
# 3! = 3 * 2!
# 2! = 2 * 1!
# 1! = 1
def jiecheng(n):
if n == 1 or n == 0:
return 1
ji = n * jiecheng(n - 1)
return ji
res = jiecheng(5)
print(res)
匿名函数
def fn(*args, **kwargs):
# 函数体
return '返回值'
匿名函数:
1.匿名函数没有函数名
2.匿名函数的关键字采用lambda
3.关键字 lambda 与标识函数功能体 : 之间一定是参数,所以省略()
4.匿名还是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了
lambda *args, **kwargs: '返回值'
注意:
1.参数的使用和有名函数一样,六种形参都支持
2.返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象
a = lambda *args, **kwargs: '返回值1', '返回值2'
print(a) # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')
# 返回值1
print(a[0]()) # 正确返回两个值: 主动构成成容器类型
lambda *args, **kwargs: ('返回值1', '返回值2')
max结合匿名工作原理
1.max内部会遍历iter,将遍历结果一一传给lambda的参数x
2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
3.对外返回最大的遍历值
max(iter, lambda x: x)
min工作原理一样,得到的是最小值
常用的内置函数
map(lambda x: x * 2, [3, 1, 2]) # 将遍历结果映射为任意类型值 [6, 2, 4] from functools import reduce
reduce(lambda x, y: x * y, [3, 1, 2]) # 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)) #
print(oct(10)) #
print(hex(10)) # a print(0b1111) #
print(0o10) #
print(0x11) #
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
# 6.获取帮助
# help(dict) # 7.执行字符串: eval() exec() # 8.反射:getattr() setattr() delattr() hasattr() # 9.面向对象的装饰器:classmethod() staticmethod() # 10.面向对象的其他:super() globals() locals()
day-15递归与函数的更多相关文章
- day 15递归 匿名函数
三元表达式 目的是简化书写 局限性:三元表达式智能简化仅有两个分支的if判断,而且这个判断无论是否成立都必须要返回值 res = True if age >=18 else False 递归: ...
- Python Day 15 递归、匿名函数、内置函数
阅读目录 内容回顾 生成器的send方法 递归 匿名函数 内置函数 ##内容回顾 #1.带参装饰器 - 自定义 | wraps def wrap(info) def outer1(func): fro ...
- ES6躬行记(15)——箭头函数和尾调用优化
一.箭头函数 箭头函数(Arrow Function)是ES6提供的一个很实用的新功能,与普通函数相比,不但在语法上更为简洁,而且在使用时也有更多注意点,下面列出了其中的三点: (1)由于不能作为构造 ...
- 十五. Python基础(15)--内置函数-1
十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...
- python 基础篇 15 内置函数和匿名函数
------------------------>>>>>>>>>>>>>>>内置函数<<< ...
- SDUT2176 -> 递归的函数
递归的函数 Time Limit: 1000 msMemory Limit: 65536 KiB Problem Des ...
- day 15 内置函数二 递归 lamda sorted filter map 二分法求值
回顾 for i in dict #对字典进行遍历,拿到的是字典的key 今日主要内容 1. lambda 匿名函数 语法: lambda 参数:返回值 不能完成复杂的操作.只能写一行 注意: 1 ...
- 深入理解JavaScript系列(15):函数(Functions)
介绍 本章节我们要着重介绍的是一个非常常见的ECMAScript对象——函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸 ...
- TControl的消息覆盖函数大全(15个WM_函数和17个CM_函数,它的WndProc就处理鼠标与键盘消息)
注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中)(特别注意,这里居然没有WM_PAINT函数): TControl = class(TComponent) private ...
随机推荐
- 获取wifi热点
https://stackoverflow.com/questions/31555640/how-to-get-wifi-ssid-in-ios9-after-captivenetwork-is-de ...
- java代码继承基础
总结:继承是java编程的核心,我搞不明白,子类对象调用父类的成员方法时.父类的带参构造方法有什么用,还赋值了 package com.bc; //普通类 public class yt { publ ...
- java代码字符字节流
总结: package com.aini; import java.io.IOException; import java.io.InputStreamReader; //流类 import java ...
- 【OK210试用体验】进阶篇(1)视频图像采集之MJPG-streamer编译(Ubuntu系统下)
转自: http://bbs.elecfans.com/jishu_510084_1_1.html 本篇主要内容分为: 嵌入式视频图像开源库 mjpg-streamer简介 mjpg- ...
- webbrowser和js交互小结
一.实现WebBrowser内部跳转,阻止默认打开IE 1.引用封装好的WebBrowserLinkSelf.dll实现 public partial class MainWindow : Windo ...
- mysql如何开启远程连接(默认未开启,即使密码正确,仍然无法访问)
mysql如何开启远程连接 | 浏览:1846 | 更新:2015-03-11 20:19 1 2 3 4 5 6 分步阅读 百度经验:jingyan.baidu.com 大家在公司工作中,经常会遇到 ...
- leetcode479
public class Solution { public int LargestPalindrome(int n) { ) ; , n) - ; ; v > max / ; v--) { S ...
- C语言学习笔记--递归函数
1. 递归函数的思想 (1)递归是一种数学上分而自治的思想,是将大型复杂问题转化为与原问题相同但规模较小的问题进行处理的一种方法 (2)递归需要有边界条件 ①当边界条件不满足时,递归继续进行 ②当边界 ...
- 根据URL下载文件
commons-io 包中已经封装好了,直接可以使用 一.添加依赖 <dependency> <groupId>org.apache.commons</groupId&g ...
- ubuntu16部署gitlab
一.gitlab的安装 1. 安装依赖包 $ sudo apt-get update #如无ssh还需安装openssh-server $ sudo apt-get install postfix c ...