函数高级
1.断点
# 启动debug
# Ctrl+F5 重新启动程序
# Ctrl+F2 停止调试
# F9 调试到下一个断点
# F8 单步调试
# ALT+shift+F7 进入函数自己定义的函数内
# F7 进入函数内部
# shift+F8 跳出函数
# ALT+F8 搜索数据
2.有名函数
#简单加法
def add(x,y):
return x+y
print(add(1, 2))
3.匿名函数
基本使用:
# 简单加法
print((lambda x, y: x + y)(2, 3))
结合内置函数使用:(重点)
# 比较薪资
salaries= {
'wang':20000,
'yun':200008,
'fei':199999
}
# 我们要比较薪资,求薪资最高的那个人名:即比较的是value,但结果取得是key
print(max(salaries)) # 默认max函数比较的是key的值,返回的也是key的值
#我们需要获取字典的value值,这样才会比较value
## 定义新的规则:获得key,返回字典对应的值
def func(key):
return salaries[key]
## key= 自己定义的比较规则(函数名) --> 在这里比较的是 key对应的value ,返回的是key的值
print(max(salaries,key=func))
#匿名函数定义规则
print(max(salaries,key=lambda key:salaries[key]))
#薪资反序
print(sorted(salaries,reverse=True)) # 默认情况下函数都是以key去进行比较的
print(sorted(salaries,key=lambda key:salaries[key],reverse=True)) #修改规则后的,比较对象从key变成value
4.递归函数
定义:
递归函数就是一个重复的过程,应该在满足某种条件下结束重复,开始进入递归阶段
#案例
L=[1,[2,[3,[4,[5,[6,[7,[8]]]]]]]]
def search(n):
for index in n:
if type(index) is int: #为整数
print(index,end=' ')
else: #为数组
search(index)
search(L)
总结:
- 递归是函数定义里面嵌套函数调用
- 递归和循环的区别:循环需要确定次数,而递归只需要确定结束条件就行
5. 闭包函数
定义:
在定义函数内定义,在外部进行调用 (通过地址去调用函数)
1.基本使用方法
# 闭包函数
def out():
print('外部函数调用')
def inner():
print('内部函数调用')
return inner #返回内部函数的地址
inner=out() #将返回的内部函数地址进行相同名称的赋值
inner() #地址() --> 相当于去调用这个函数
2.为函数体传数值 (适用于每次都是一样的参数)
#例示
def out(x,y): #传入的数值就相当于多加了一种调味(十三香)
def func():
print(x+y) # 多加十三香(那两个数值)对应的func
return func
func=out(3,4) #获得特定调味(特定数值)的肉馅(闭包函数)
func()
6.装饰器
定义:
装饰器是闭包函数的进一步扩展利用,装饰器的要求要高于闭包函数:
1、不修改被装饰对象的源代码
2、不修改被装饰对象的调用方式 (地址赋时的巧妙利用)
修饰器在后,被修饰函数在前
# 修饰器后,被修饰函数在前
#导入datetime模块
from datetime import datetime
# func()
# 修饰器后,被修饰函数在前# 计算1-900000相加所消耗的时间
#未修饰的函数
def for1(n):
sum1=0
for i in range(1,n+1):
sum1+=i
print(sum1)
#计时修饰器
def run_time(func): #传入原来的函数进行正常使用
def new_func(n): # 在使用原函数的基础上,进行其他功能的添加
start_time = datetime.now()
func(n)
end_time = datetime.now()
time1= end_time - start_time
print('相差的时间为%s'%time1)
return new_func #返回经过修饰的新函数的地址
for1=run_time(for1) # 避免修改原函数的调用方式
for1(9000000)
修饰器在前,被修饰函数在后
# 修饰器后,被修饰函数在前
#导入datetime模块
from datetime import datetime
# func()
# 修饰器后,被修饰函数在前# 计算1-900000相加所消耗的时间
#计时修饰器
def run_time(func): #传入原来的函数进行正常使用
def new_func(n): # 在使用原函数的基础上,进行其他功能的添加
start_time = datetime.now()
func(n)
end_time = datetime.now()
time1= end_time - start_time
print('相差的时间为%s'%time1)
return new_func #返回经过修饰的新函数的地址
#@修饰器名字 --> 直接进行修饰
@run_time
def for1(n):
sum1=0
for i in range(1,n+1):
sum1+=i
print(sum1)
#for1=run_time(for1) 底层自动替换
for1(9000000)
图片理解:博客使用
e(1,n+1):
sum1+=i
print(sum1)
#for1=run_time(for1) 底层自动替换
for1(9000000)
图片理解:博客使用
[外链图片转存中...(img-Ho5tZXy9-1718639064088)]
[外链图片转存中...(img-VyqWvzV3-1718639064089)]