Python Day 15 递归、匿名函数、内置函数
阅读目录
内容回顾
生成器的send方法
递归
匿名函数
内置函数
##内容回顾
#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 == '':
return outer1
return outer2 # outer = wrap('1')
# @outer
@wrap('')
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__() #
##生成器的send方法
# send的工作原理
# 1.send发生信息给当前停止的yield,所以在send之前就可以发送个send(None)值,或者使用next(obj)方法
# 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.返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象
# 3.用变量接收,该变量就存放了匿名函数的函数地址
# -- 函数又有名字了,用完也不能被回收了,匿名函数匿名也没意义了 a = lambda *args, **kwargs: '返回值1', '返回值2'
print(a) # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')
# 返回值1
print(a[0]()) # 正确返回两个值: 主动构成成容器类型
lambda *args, **kwargs: ('返回值1', '返回值2')
##内置函数
#max和min内置函数
# max结合内置函数来使用
# max:工作原理
# 1.max内部会遍历iter,将遍历结果一一传给lambda的参数x
# 2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
# 3.对外返回最大的遍历值
max(iter, lambda x: x) # min工作原理一样,得到的是最小值 #示例:
print(max(10, 2000, 300, 5))
print(max('azbd')) dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
} def fn(k):
print(k)
# return k
# return dic[k][0]
return dic[k][1]
res = max(dic, key=fn)
print('====================')
print(res) def max(iter, fn)
for v in iter:
res = fn(v)
# 用res作为比较对象
return 用fn提供的返回值作为比较对象,得到最大的v # max结合匿名函数
dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
}
print(max(dic, key=lambda k: dic[k][1])) # 求薪资最大的人
print(max(dic, key=lambda k: dic[k][0])) # 求员工号最大的人
print(max(dic, key=lambda k: k)) # 求名字最大
print('=====================')
# min
print(min(dic, key=lambda k: dic[k][1])) # 求薪资最小的人
print(min(dic, key=lambda k: dic[k][0])) # 求员工号最小的人
print(min(dic, key=lambda k: k)) # 求名字最小
# map:映射 把一个列表按照我们自定义的映射规则映射成一个新的列表
# def fn(x):
# return x * 2
# res = map(fn, [3, 1, 4, 2, 5])
# print(list(res)) dic = {
'owen': 3,
'zero': 5
}
res = map(lambda k: (k, dic[k] * 2), dic)
print(list(res)) # [('owen', 6), ('zero', 10)]
# for v in res:
# print(v)
# names=['alex','lxx','wpx','yxx']
# res = map(lambda name:name+'dSB',names)
# print(list(res))
# reduce:合并 把多个值合并成一个结果
from functools import reduce
res = reduce(lambda x, y: x + y, [3, 1, 2, 4, 5]) # 所以元素的和
print(res)
res = reduce(lambda x, y: x * y, [3, 1, 2, 4, 5]) # 所有元素的积
print(res)
print(sum([3, 1, 2, 4, 5])) #filter 过滤
从一个列表中过滤出符合我们过滤的值,工作原理:相当于for循环取出每一个人名,然后传给匿名函数,将调用匿名函数返回值位True的结果留下来
# names=['alex_sb','lxx_sb','wpx','yxx']
# res=filter(lambda name:name.endswith('sb'),names)
# print(list(res))
# 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) #
from functools import reduce # 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 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'] # 6.获取帮助
# help(dict) # 7.执行字符串: eval() exec() # 8.反射:getattr() setattr() delattr() hasattr() # 9.面向对象的装饰器:classmethod() staticmethod() # 10.面向对象的其他:super() globals() locals()
print(globals()) def fn():
a = 10
b = 20
def inner(): pass
print(globals())
print(locals()) fn()
Python Day 15 递归、匿名函数、内置函数的更多相关文章
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python 匿名函数&内置函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...
- python基础(14)-反射&类的内置函数
反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...
- Python学习笔记014——迭代工具函数 内置函数enumerate()
1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...
- Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...
- python 函数--内置函数
一.内置函数 内置函数是python自带的一系列常用函数. 二.python3中内置函数 内置功能 abs() delattr() hash() memoryview() set() ...
- python学习day11 函数Ⅲ (内置函数与lambda表达式)
函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- Python基础(10)_内置函数、匿名函数、递归
一.内置函数 1.数学运算类 abs:求数值的绝对值 divmod:返回两个数值的商和余数,可用于计算页面数 >>> divmod(5,2) (2, 1) max:返回可迭代对象中的 ...
- Python——day14 三目运算、推导式、递归、匿名、内置函数
一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系 cmd = input ...
随机推荐
- 解决Resharper在Core项目中无法执行单元测试的问题
项目升级core了,resharper最近升级到2018.1版本,但是安装后还是无法直接运行单元测试,昨天小姐姐发了解决方法,贼有用.所以记录一下,给自己以后或者其他遇到此问题的小伙伴用. 解决Re ...
- spark第四篇:Running Spark on YARN
确保HADOOP_CONF_DIR或者YARN_CONF_DIR指向hadoop集群配置文件目录.这些配置用来写数据到hdfs以及连接yarn ResourceManager.(在$SPARK_HOM ...
- oracle 基础(一)--闪回技术
一,闪回表初探 闪回须知: 1 使用闪回表注意如下事项: 2 3 (1)被闪回的表必须启用行移动功能 4 5 SQL> alter table dept enable row movement; ...
- python 管理多版本之pyenv
一, [root@management ~]# pyenv install -listAvailable versions: 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3 ...
- svn checkout时连接不到服务器,重装也没有弹出用户名和密码输入框的问题
用公司的电脑,是win7 64位的系统,可以checkout出东西.现在用自己的电脑上,系统是win7 64位的,却再也连不上SVN. 1.不提示输入用户名和密码,不管重装多少次都一样. 2.Tort ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
找到了2个函数:unique和ismember 1. 去掉其中的重复行:unique 例子: IDX = [,,; ,,; ,,; ,,; ,,; ,,]; classNo = unique(IDX, ...
- 九度oj题目1518:反转链表
题目1518:反转链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2567 解决:948 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) ...
- C++ 编译器
C++编译器 当我们定义了一个类的时候, C++编译器在默认的情况下会为我们添加默认的构造方法, 拷贝构造方法, 析构函数和=运算符 在第一次创建对象的语句中如: MyString myString ...
- json数据的存储与读取
1. json数据格式: data = [ {"key1":"xxx","item":"ddd"}, {"k ...