day15生成器send方法,递归,匿名函数,max结合匿名工作原理,常用的内置函数
复习
'''
1.带参装饰器 - 自定义 | wraps def wrap(info)
def outer1(func):
from functools import wraps
@wraps(func)
def inner(*args, **kwargs):
# 需要外界的参数
return func(*args, **kwargs)
return inner
def outer2(func):
def inner(*args, **kwargs):
# 需要外界的参数
return func(*args, **kwargs)
return inner
if info == '1':
return outer1
return outer2 # outer = wrap('1')
# @outer
@wrap('1')
def fn():pass 2.可迭代对象:有__iter__()方法的对象,并且调用__iter__()方法得到迭代器对象 3.迭代器对象:有__next__()方法的对象,并且调用__next__()方法从前往后逐一取值
# 不依赖索引取值,但必须从前往后依次取值(无法获取索引,也无法计算长度) 4.for循环迭代器
1)得到操作对象的迭代器对象
2)通过__next__()进行取值
3)自动处理StopIteration异常,结束循环 5.枚举对象:为被迭代的对象添加迭代索引 6.生成器:语法同函数,内部包含yield关键字,函数名() 不是函数调用,而是得到生成器对象 -> 就是自定义的迭代器对象 ''' with open('abc.txt', 'r', encode='utf-8') as f:
for line in f:
pass def fn():
# ...
yield 1
# ...
yield 2
obj = fn()
res = next(obj) #
fn().__next__() #
fn().__next__() #
fn().__next__() #
今日内容
'''
1.生成器的send方法 了了解 2.递归:函数自己调自己 3.匿名函数 4.内置函数
'''
生成器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
day15生成器send方法,递归,匿名函数,max结合匿名工作原理,常用的内置函数的更多相关文章
- python基础--递归、三元表达式、列表(字典)生成式、匿名函数、常用的内置函数
函数的递归:函数在调用阶段直接或者间接的又调用自身 递归的两个阶段: 1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都是应该下降的,直接有一个最终的结束条件(这个结束条 ...
- Python学习笔记——常用的内置函数
一.yield def EricReadlines(): seek = 0 while True: with open('D:/temp.txt','r') as f: f.seek(seek) da ...
- Python基础学习笔记(七)常用元组内置函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...
- python常用的内置函数哈哈
python常用的内置函数集合做一个归类用的时候可以查找 abs 返回数字x的绝对值或者x的摸 all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为true,就 ...
- python常用的内置函数
python常用的内置函数集合做一个归类用的时候可以查找- abs 返回数字x的绝对值或者x的摸 - all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为tru ...
- python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块
---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...
- Python中生成器,迭代器,以及一些常用的内置函数.
知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 ...
- day16_函数作用域_匿名函数_函数式编程_map_reduce_filter_(部分)内置函数
20180729 补充部分代码 20180727 上传代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # ***************** ...
- Python基础学习笔记(八)常用字典内置函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...
随机推荐
- XIB约束布局问题(通过优先级改变界面布局)
需要注意的是,只能修改可选约束的优先级,也就是说: 不允许将优先级由小于1000的值改为1000 不允许将优先级由1000修改为小于1000的值 例如,如果将优先级由250修改为1000,则会抛出异常 ...
- vim小白练习记录
1.vim卡死 按ctrl+s键后 vim卡死,按任何键不管用,按ctrl+q恢复
- DDD领域驱动设计初探(七):Web层的搭建
前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...
- node项目实战-用node-koa2-mysql-bootstrap搭建一个前端论坛
前言 在学习了koa2和express并写了一些demo后,打算自己写一个项目练练手,由于是在校生,没什么好的项目做,即以开发一个前端论坛为目标,功能需求参照一下一些社区拟定,主要有: 登录注册 个人 ...
- Arduino-舵机
舵机一般都外接三根线,一般棕色为接地线(GND),红色为电源正极线(VCC),橙色为信号线(PWM). 用Arduino控制舵机的方法有两种: 一种是通过Arduino的普通数字传感器接口产生占空比不 ...
- 【SaltStack官方版】—— states教程, part 4 - states 说明
STATES TUTORIAL, PART 4 本教程建立在第1部分.第2部分.第3部分涵盖的主题上.建议您从此开始.这章教程我们将讨论更多 sls 文件的扩展模板和配置技巧. This part o ...
- Spring 自动代理
在传统的基于代理类的AOP实现中,每个代理都是通过ProxyFactoryBean织入切面代理,在实际开发中,非常多的Bean每个都配置ProxyFactoryBean开发维护量巨大.解决方案:自动创 ...
- HDU 1134 Game of Connections(卡特兰数+大数模板)
题目代号:HDU 1134 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 20 ...
- 「LibreOJ β Round #2」计算几何瞎暴力
https://loj.ac/problem/517 题解 首先我们如果没有排序这个骚操作的话,可以直接记一下各个数位的前缀和,然后异或标记给全局打,查询的时候先把区间信息提取出来然后整体异或就好了. ...
- angular项目开发
第 1 步:安装 Angular CLI 你可以使用 Angular CLI 来创建项目.生成应用和库代码,以及执行各种持续开发任务,比如测试.打包和部署. 全局安装 Angular CLI. 要使用 ...