Python的学习之旅———函数的递归调用 匿名函数 内置函数

时间:2022-10-08 19:16:49

一 函数的递归调用

 函数递归调用:在调用一个函数的过程中直接或间接地调用该函数本身,称之为函数的递归调用.

 递归分为两个重要的阶段:递推+回溯

 

总结递归调用:
1:进入下一次递归时,问题的规模必须降低
2:递归调用必须要有一个明确的结束条件
3:在python中没有尾递归优化,递归调用的效率就是不高

二 匿名函数

 匿名函数即没有绑定名字的函数,没有绑定名字,意味着只能用一次就会被回收
 所以说匿名函数的应用场景就是:某个功能只用一次就结束了.

def f1(n):
return n**2

lambda n:n**2

res=zip(salaries.values(),salaries.keys())  zip的结果是一个迭代器.

三 内置函数:

max与lambda的结合

 1 salaries={
2 'egon':3000,
3 'alex':100000000,
4 'wupeiqi':10000,
5 'yuanhao':2000
6 }
7 # def f1(k):
8 # return salaries[k]
9 # 1 2
10 # print(max(salaries,key=lambda k:salaries[k]))
11 # 2 key=(比较什么)
12 # max() 是比较 比较1 salaries的元素(谁比较) ,比较什么呢依据就是key=lambda k:salaries[k] 就是工资,结果是 alex牛逼
13 # print(min(salaries,key=lambda k:salaries[k]))

#map,reduce,filter  

都是要for 循环后面的值.

map   for循环后面的值  格式 map(匿名函数,      for循环的值--遍历的俩表或者range()的值)

1 l=['alex','wupeiqi','yuanhao','huanghongwei']
2 print(list(map(lambda x:x+'_SB',l))) #映射 黏贴也成

reduce  合并 for循环后面的值        格式  reduce(匿名函数,     for循环的值,         给一个初始的数)

函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值
from functools import reduce  先要引入
reduce()函数也是Python内置的一个高阶函数。
reduce(lambda x,y:x+y,range(1,101),100)
前面函数两个参数,循环第一次只能取一个值,不能执行,
所以reduce,先判断是否有初始值,在没有初始值的时候,会取一个值,把这个值,赋值给初始值,然后再取出一个值,进行计算.1+2=3
把3设为初始值,拿出3,得到6,拿出4得到10 以此类推.

reduce(lambda x,y:x+y,range(1,101),100)
这次有初始值了 100+1然后得到101+2 103+3 以此类推

filter  格式 filter(匿名函数,   for循环的值,)

1 l=['alex_SB','wupeiqi_SB','yuuanhao_SB','hhw','egon']
2 res=filter(lambda name:name.endswith('SB'),l)
3 print(list(res))

取出l中符合前面规则的留下在列表里.

['alex_SB','wupeiqi_SB','yuuanhao_SB']

 

map,reduce,filter   运行之后得到的都是迭代器.

abs     (数字) 取绝对值
all       (可迭代对象,迭代出的元素都是Ture,才返回Ture,如果可迭代对象是空也返回Ture)
any    (可迭代对象,迭代的对象只要有一个是真的就返回Ture,如果是可迭代对象是空返回false)
bin()   10进制换成2进制
oct()   10进制换成8进制
hex()   10进制换成16进制
max(for循环,key=比较依据)
min(for循环,key=比较依据)
callable()   是否是可以被调用
complex()   复数2-4j
print(x.real)  实部
print(x.imag)  虚部
sorted  对列表内的数字排序   

1 l = {'a':1, 'c':3, 'b':7, 'd':10, 'e':49, 'r':60, 'g':100, 'o':200, 'w':430}
2 print(sorted(l))
3 ['a', 'b', 'c', 'd', 'e', 'g', 'o', 'r', 'w']

map   匿名函数,可迭代对象)

reversed(l) 翻转

round(10.55545,3)  保留三位小数 四舍五入

sum 求和  print(sum([1,2,3,4]))         print(sum(range(10)))    遵循迭代器协议,都是取一个值算一次 取一个值算一次

slice       obj=slice(1,5,2) 设置切片规则          print(l2[obj])

bool 求布尔值0 None 空是假的.
chr()把数字转成字符65-90 A-Z
ord()字符转换成数字
divmod(10,3) 得到 (3,1)10除以3 余1
enumerate(可迭代对象) 结果是  将可迭代对象的索引和元素组成一个元组
id在 不是内存的真实地址 只是python的一直实现机制 表现内存的位置 如果有内存地址要以内存地址为准.

index 求出列表内元素的索引  list.index(200)
input 用户交互
print  打印
isinstance 比较类型
iter 可迭代
len 长度
open 获取文件句柄with open ('文件位置','文件打开方式','字符编码') as f:
pow(10,2,3) 10的2次方 对3取余数.
type 类型
zip 拉链

__import__(m)  一直以字符串形式 调用模块的方式

1 m=input('>>: ')
2 print(type(m))
3 obj=__import__(m)
4 obj.sleep(3)

eval:提取字符串内的表达式执行,然后返回执行结果

Python的学习之旅———函数的递归调用 匿名函数 内置函数Python的学习之旅———函数的递归调用 匿名函数 内置函数
1 s1="1+2+3"
2 s1="['a','b','c']"
3 l=eval(s1)
4 print(type(l))
eval

只能执行有结果的,不能执行语句

exec:仅仅只是执行字符串内的表达式或语句,没有返回值

compile

compile(str,filename,kind)
filename:用于追踪str来自于哪个文件,如果不想追踪就可以不定义
kind可以是:single代表一条语句,exec代表一组语句,eval代表一个表达式
s
='for i in range(10):print(i)'
code
=compile(s,'','exec')
exec(code)


s
='1+2+3'
code
=compile(s,'','eval')
eval(code)