基础补充

三元运算符:就是 if...else...语法糖 前提:if和else只有一条语句
# 原
cmd = input('cmd: ')
if cmd.isdigit():print('可以转化为数字')
else:print('不可以转化为数字')
# 简化
cmd = input('cmd: ')
print('可以转化为数字') if cmd.isdigit() else print('不可以转化为数字')# 案例:得到两个数大值
a = 20
b = 30
res = a if a > b else b  # 求大值
print(res)# 三元运算符的结果不一定要与条件直接性关系
res = 'b为小值' if a > b else 'a为小值'  # 求小值
print(res)-------------------------------------------------------------------
推导式列表(元组)与字典的转换语法糖
# 列表(元组)推导式
dic = {'a': 1, 'b': 2, 'c': 3}  # => [('a', 1), ('b', 2), ('c', 3)]
res = [(k, v) for k, v in dic.items()]
print(res)
# 元组推导式
res = ((k, v) for k, v in dic.items())
print(tuple(res))# 字典推导式
ls = [('a', 1), ('b', 2), ('c', 3)]  # => {'a': 1, 'b': 2, 'c': 3}
res = {k: v for k, v in ls}
print(res)# 案例
range(10)  # 可以被推导为列表
res_ls = [arg for arg in range(10)]
print(res_ls)
res_dic = {'a': arg for arg in range(10)}
print(res_dic)# 迭代出可解压为的单列容器可以推导出字典
res_dic = {v: k for k, v in enumerate('abc')}
print(res_dic)

递归
# 递归:回溯与递推 # 询问答案的过程是回溯,推出答案的过程是递推# 本质:函数的自我调用  # 直接:自己调自己  # 间接:自己调别人,别人最终又调回自己 

# 前提:******       # 回溯到一个有具体结果的值,开始递推       # 回溯与递推的条件要有规律:一致或有序
# 递归本质:函数的自我调用(自己调自己)
import sys
sys.setrecursionlimit(100)  # 手动设置递归深度
print(sys.getrecursionlimit())  # 默认1000

count = 0
# 自己调自己
def a():global countcount += 1if count > 50:returna()
a()# 函数间接调用自己:一旦形成循环调用,就产生了递归
def b():c()
def c():d()
def d():b()
b()

# 询问第一个人年龄,回溯条件 比第二个人小两岁,下一个都比前一个大两岁,直到第五个人说出自己的年龄,推导出第一个人年龄
# 条件:下一个人的年龄比这个人年纪大两岁
def get_age(num):  # 得到年龄if num == 1:return 58age = get_age(num - 1) - 2return age
res = get_age(5)
print(res)# 阶乘
# 5! = 5 * 4!    4! = 4 * 3!   ...   2! = 2 * 1
def factorial(num):if num == 1:return 1temp = num * factorial(num - 1)return temp
res = factorial(5)
print(res)

案例:
def func():return [lambda x: x * i for i in range(4)]  # [6,6,6,6]  for调用不产生局部名称空间:值产生4个值,没被调用,后一个覆盖前一个,调用的时候只余最后一个值# return [lambda x, i=i: x * i for i in range(4)]  # [0, 2, 4, 6] lambda:函数调用产生局部名称空间# def m(2):
#     return 2 * 0|1|2|3print([m(2) for m in func()])# 1.func()执行结果为list,所以被迭代
# 2.for i in range(4)能产生4次结果,所以func()的返回值list有四个元素
# 3.最终打印的列表推导式也有四个元素
# 4.func()返回值list中存放的是四个函数地址,匿名函数体没有被执行
# 5.m(2)时,匿名函数体才被调用,但四个匿名函数都已形成,再去获得i的值,i存放的是最后一次值3

理解案例:
y=20  # ①
def aaa(arg=y): # ②print(y)    # 40  ⑤ 调用的永远是调用函数前的最后一个yprint(arg)  # 20  ⑥
y=30
y=40  # ③
aaa() # ④
y=50def fn(x):print(x)return 0res = max([11, 9, 7, 5], key=fn)  # 列表第一个元素不作为函数参数调用函数
print('>>>:', res) #11 ←[11,0,0,0]------------------------------------------------
def fn(x):print(x)return x
res = max([1, 5, 3, 2, 4], key=fn)
print('>>>', res)dic = {'a': 100, 'b': 10}
res = max(dic, key=lambda k: dic[k])
print('>>>', res)

匿名函数
没有名字的函数, 没有函数体,不会单独存在 只有一个返回值,多个加括号 关键字:lambda | 参数列表省略()| 返回值return关键字也被省略 语法: lambda 参数列表:一个返回值表达式

f = lambda x, y: (x + y, x - y)print(f)print(f(10, 20)) 
应用场景:1.匿名函数函数地址可以被一个变量接受,该变量就可以作为函数名来使用,但就违背了匿名初衷2.结合内置函数来使用: 内置函数某些参数需要一个函数地址,可以赋值一个有名函数名,也可以直接赋值匿名函数
res = max(10, 20, 50, 30)
print(res)
res = max({10, 20, 50, 30})
print(res)def fn(arg):print(arg)return argls = [100, 200, 50, 10]
res = max(ls, key=fn)
-------------------------------------print(res)res1 = max(ls, key=lambda ele: ele)
print(res1)

内置函数

iterable = [1, 5, 3, 2, 7]
res = max(iterable, key=lambda x: x)  # 参数:可迭代对象遍历的元素;返回值:做比较的值
print(res)# 薪资最高
iterable = {'Bob': 12000,'Tom': 37000,'Jerry': 76000,'Zero': 120,
}
res = max(iterable, key=lambda x: iterable[x])  # x: 字典的k  返回值:做比较的值
print(res)iterable = {'Bob': {'no': 100, 'salary': 12000},'Tom': {'no': 200, 'salary': 37000},'Jerry': {'no': 50, 'salary': 76000},'Zero': {'no': 150, 'salary': 120},
}
res = max(iterable, key=lambda k: iterable[k]['no'])
print(res)
res = max(iterable, key=lambda k: iterable[k]['salary'])
print(res)# min
iterable = {'Bob': [100, 12000],'Tom': [200, 37000],'Jerry': [50, 76000],'Zero': [150, 120],
}
res = min(iterable, key=lambda k: iterable[k][1])  # 薪资最小
print(res)#  sorted
res = sorted([1, 3, 4, 2, 5], key=lambda x: x, reverse=True)
print(res)iterable = {'Bob': [100, 12000],'Tom': [200, 37000],'Jerry': [50, 76000],'Zero': [150, 120],
}
res = sorted(iterable, key=lambda x: iterable[x][0])  # 按no排序
print(res)# map:映射
res = map(lambda x: x + 2, [12000, 36000, 27000, 21000, 10000])
print(list(res))from functools import reduce
# reduce: 合并
res = reduce(lambda f, n: f * n, [1, 2, 3, 4, 5])
print(res)    # 传入两个值后相乘,返回一个值,与下一个传入的相乘,直到传完最后一个:120# 重点:
# classmethod()
# staticmenthod()
# super()
# object()# 名称空间
# globals()
# locals()# 反射
# getattr()
# setattr()
# delattr()# 名称空间 <=> 可执行字符串
# exec()# enumerate()
# isintance()
# len()
# max()
# min()
# open()
# range()
# type()
---------------------------------------------------------# 运算
print(abs(-1))  # 绝对值
print(pow(2, 3, 3))  # 2 ** 3 % 3
print(sum([1, 2, 3]))  # 求和
print(divmod(100, 30))  # 100与30形成商与余数# 集合判断操作
print(all([1, 2, 'abc']))  # 元素全真为真
print(any([1, "", None]))  # 元素有真则真
filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])  # 偶数才能通过过滤# 原义字符串
print(ascii('\n-*..'))
print(repr('\n-*..'))
print(r'\n-*..')# 进制
print(10)
print(bin(10))
print(oct(10))
print(hex(10))# 类型转化
bool()
str()
bytes()
chr()
ord()
range(1, 5)  # [1, 2, 3, 4]def aaa():pass
print(callable(aaa))  # 可调用的# 可以理解将最外层''去除,形成可执行的对象
s = 'print(123)'
# print(s)
eval(s)
s = '{"a": 1}'
res = eval(s)
print(res['a'])res = divmod(100, 30)  # 100与30形成商与余数
print(res)res = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
print(list(res))# 格式化
res = format(97, 'b')
print(res)# 全局名称空间
print(globals())
def a():a = 10b = 20print(locals())
a()# hash算法处理
# print(hash([]))  # 可变类型不可hash
# print(hash(()))  # 不可变可以hash
# import uuid
# print(uuid.uuid4())
t = max(iter, fn)  max(iter lambda k: i[k])temp = Nonefor k in iter:res = fn(k)# res作为比较的条件# temp存放以res比较得到的最大值return temp

https://docs.python.org/zh-cn/3.7/library/functions.html#all

 

转载于:https://www.cnblogs.com/zhouyongv5/p/10656584.html

14 递归 匿名函数 内置函数相关推荐

  1. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...

    1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...

  2. python - - 函数 - - 内置函数和匿名函数

    目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...

  3. Python学习8 函数 匿名函数 内置函数

    转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...

  4. javaScript内置函数(内置函数,内置关键字)

    javaScript内置函数(内置函数,内置关键字)js的内置对象是js自带,封装了一些常用的方法.常用的js内置对象有:String,Date,Array,Math等:js内置函数是浏览器内核自带的 ...

  5. 函数【七】高阶函数/内置函数

    python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被 ...

  6. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  7. 函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数

    一.递归函数 递归函数:就是在函数调用阶段直接或者间接的调用自己 递归函数的两个阶段: 1.回溯:不停的重复的一个过程,在这个过程中将问题不断的简单化,直到最终打到要求(条件) 2.递归:一次次的往回 ...

  8. 4/2 三元表达式/函数递归/匿名函数/内置函数

    三元表达式 def max2(x,y) if x > y: return x else return y res=max2(10,11) 三元表达式仅应用于: 1 条件成立返回一个值 2 条件不 ...

  9. python基础12_匿名_内置函数

    # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, 66]def bina ...

最新文章

  1. matlab 离散点差值,散点图的插值方法
  2. Oracle Spatial 翻译第一漳
  3. Java反射基础(三)--Methods对象的使用
  4. mysql sqlstate 08001_关于Toad连接DB2的sqlstate=08001错误
  5. Django--QuerySet--基础查询
  6. 根据中文字符串查询拼音声母
  7. Oracle的sql基本语法总结(3)-- Oracle synonym 同义词的创建、查看、删除、作用
  8. 各种音视频编解码学习详解(7)--微软Windows Media系列
  9. 申报2021国家高新技术企业认定,有哪些标准?
  10. java 花卉管理系统_基于jsp的花卉交易-JavaEE实现花卉交易 - java项目源码
  11. Discuz被挂马的处理经验,Dz为什么会被挂马
  12. css span文字下划线
  13. 开源软件新时代:55个经典开源Windows工具
  14. 最新版IDEA设置打开IDEA弹出新窗体
  15. Miracast投屏反控
  16. 如何将guake设置为开机自启动
  17. FairyGUI循环列表
  18. 布隆过滤器原理(有眼睛就能看懂)
  19. 版本名称的英文缩写代表的含义
  20. 鲸落送书第二期清华出版社系列丛书

热门文章

  1. sql server跨服务器修改数据,SQL Server跨数据库服务器查询和跨表更新的详细操作...
  2. mysql联合索引测试
  3. 华为qy2音乐如何转换为mp3_华为手机还有这种骚操作?开启这个功能,让你体验至尊级待遇...
  4. php解决mysql主从同步_mysql 主从同步原理
  5. c语言坐标绕路,C语言中的奇技淫巧
  6. mysqlgbk不支持中文吗_【转载】mysql 不支持中文解决办法
  7. java 中文 转义_java下载url路径包含中文需要转义的操作
  8. c语言冒泡排序的两种实现方式,c语言中冒泡排序的实现原理是什么?
  9. oracle有条件插入数据,Oracle有条件地插入数据
  10. linux系统ssh服务无法启动,Linux上的SSH无法启动