Python函数高级

函数高级

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)

总结:

  1. 递归是函数定义里面嵌套函数调用
  2. 递归和循环的区别:循环需要确定次数,而递归只需要确定结束条件就行

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)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lye001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值