递归调用、二分法、匿名函数和内置函数

本文介绍了递归调用的概念及其实现,并深入探讨了Python中的高级函数特性,包括匿名函数、lambda表达式、max/min/sorted等内置函数的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归调用

递归调用

1、在调用一个函数的过程中,直接或者间接又调用该函数本身,称为递归调用
2、递归必备的俩个阶段:

1、递推
2、回溯

#修改最大递归层数
import sys
print(sys.getrecursionlimit())
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit())
l=[1,[2,[3,[4,[5,[6,[]]]]]]]
def func(l):
    for item in l:
        if type(item) is list:
            func(item)
        else:
            print(item)
func(l)
###########################################
#age(3)=age(2)+2
#age(2)=age(1)+2
#age=18
#age(n)=age(n-1)+2
#age(1)=18
def age(n):
    if n == 1:
        return 18
    return age(n-1)+2
res=age(200)
print(res)

二分法

匿名函数

1、有名的函数,可以重复调用,匿名函数就相当于只有一个内存地址
2、匿名函数指声明了一个内存地址,直接打印就能看到函数的返回值
3、
max,min,sorted,map,reduce,filter

lambda函数
salaries={
    'egon':3000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
}
#有名字的函数:
def my_sum(x,y):
    return x+y
print(my_sum(1,2))

#使用匿名函数:
print((lambda x,y:x+y)(1,2))


print(max(salaries,key=func))#key=func('egon')

print(max(salaries,key=lambda k:salaries[k]))
print(min(salaries,key=lambda k:salaries[k]))

#如:
def sayhi(n):
    print(n)

sayhi(5)
(lambda n:print(n))(5)

calc=lambda n:3 if n <4 else n
print(calc(5))

def lam(n):
    calc=[3 if n <4 else n ]
lam(5)
Max,min函数

for 循环salaries,取出字典的key,key=func,当做参数传给func,把func函数的返回值,赋值给key,当做比较依据。

#max,min
def func(k):
    return salaries[k]
print(max(salaries,key=func))#key=func('egon')
print(max(salaries,key=lamdba k:salaries[k]))
print(min(salaries,key=lamdba k:salaries[k]))
sorted函数:
# sorted,
print(sorted(salaries,key=lambda k:salaries[k]))
#reverse=True的意思是取反的意思
print(sorted(salaries,key=lambda k:salaries[k],reverse=True))

#如:
a={4:2,1:0,10:-121,-4:-21}
print(sorted(a))
print(sorted(a.items()))
print(sorted(a.items(), key=lambda x:x[1]))
>>>
>[-4, 1, 4, 10]
[(-4, -21), (1, 0), (4, 2), (10, -121)]
[(10, -121), (-4, -21), (1, 0), (4, 2)]
map函数,映射
# map,
names=['alex','wupeiqi','yuanhao']
# l=['%s_sb'%name for name in names ]
# print(l)
g=map(lambda name:'%s_db'%name,names)
# print(list(g))
print(next(g))
print(next(g))
print(next(g))
filter函数,过滤功能
# filter
names=['alex_sb','wupeiqi','yuanhao']
#filter(lambda x:if x.endswith('sb'),names) #第二个参数为迭代器,然后使用for循环names,x:后面判断下值里面是否是sb
filter(lambda x:x.endswith('sb'),names)
reduce函数,合并
# reduce,
from  functools import reduce
reduce(lambda x,y:x+y,range(100))
print(reduce(lambda x,y:x+y,range(100)))

内置函数

需要掌握的函数
divmod #意思是第一个值除第二个字,等于多少余一个多少
print(divmod(1002,25))
enumerate #打印每一个vlues的index,值
l=['a','b','c']
for i in l:
    print(l.index(i),i,)

for i,v in enumerate(l):
    print(i,v)
eval #把字符串类型的列表转换为list
res=eval('[1,2,3,4,5,6]')
print(res,type(res))
#exec  #单纯的执行str
res=exec('[1,2,3,4,5,6]')
print(res,type(res))
pow #pow #2的3次方,除3取余
res=pow(2,3,3)
print(res)
round #round #四舍五入
print(round(2.5))
了解的
print(abs(-1)) #数字取绝对值

print(all([1,2,'a','z'])) #全部为真就为真
print(all([None])) #为假的有False、None、0

print(bin(11))  #转换二进制
print(hex(11))  #转换十六进制

import os
# print(dir(os))  #返回这个模块可用的内置函数

s=frozenset({1,2,3}) #不可变集合

print(hash('xxx')) #转换为hash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值