5.Python函数高级

有名函数

多次使用,会重复调用

def run(x,y):
	print(x,y)
	return x,y
run(1,2)

匿名函数

1 匿名函数:就是没有名字的函数
2 为何要用:
用于仅仅临时使用一次的场景,没有重复使用的需求

匿名函数的定义

print(lambda x, y: x + y)

表达式

(lambda x, y: print(x + y))(1, 2)

匿名函数一般和max,min,sorted连用

	salaries= {
		'xialuo':3000000,
		'xishi':30000,
		'dahai':3000
	}

def func(name):
	return(salaries[name]

#比较value值
#求最大值
print(max(salaries,key=lambda name:salaries[name]))	
#求最小值
print(min(salaries,key=lambda name:salaries[name]))

#反序
print(sorted(salaies,key=lambda name:salaries[name],reverse=True))
#正序
print(sorted(salaies,key=lambda name:salaries[name],reverse=False))

递归函数

1.什么是递归函数
函数的递归调用是函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用
递归死循环是没有意义的

递归调用必须有两个明确的阶段:
1. 回溯: 一次次递归调用下去,说白了就一个重复的过程,
但需要注意的是每一次重复问题的规模都应该有所减少,
直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
2. 递推: 往回一层一层推算出结果

递归是函数的定义里面嵌套函数的调用
*****递归与循环的区别,循环每一次都要判断,需要考虑多少次
而递归只需要确定结束条件就行,按照规律进行重复调用,不需要考虑次数

第五个人年龄为第4个人加2岁

def age(n):
	if n ==1:
		return 18
	if n>1:
		return age(n-1)+2
print(age(5))

循环取值

L = [1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]

def search(L):
    for n in L:
        # print(n)
        if type(n) is not list:
            print('我是数字%s'%n)
        else:
            search(n)
search(L)

闭包函数

闭包
闭指的是:该函数是一个内部函数
包指的是:指的是该内部的函数名字在外部被引用

def outer(x,y):
    def func():
        print(x+y)
    return func

#每次都是传入同样的参数
func1=outer(3,2)
func1()
func1()
func1()

装饰器

装饰器就是一个特殊的闭包函数
1、什么是装饰器(就是一个函数,只不过这个函数不是给自己使用的,是给其他函数添加功能的)
器指的是工具,而程序中的函数就具备某一功能的工具
装饰指的是为被装饰器对象添加额外功能
2、为什么要用装饰器
软件的维护应该遵循开放封闭原则
开放封闭原则指的是:
软件一旦上线运行后对修改源代码是封闭的,对扩展功能的是开放的
这就用到了装饰器

装饰器的实现必须遵循两大原则:
1、不修改被装饰对象的源代码(人的原来的性格,生活方式)
2、不修改被装饰对象的调用方式(人的原来的外貌,名字)

实例

name='大海'
#装饰器
def  decorate(func): #func等下传入run
	def new_func(name):#run(name) 的 name
		print("装饰前面的代码")
		func(name)
		print("装饰后面的代码")
		
	return new_func
	




#被装饰函数
@decorate
def run(name):
	print('=================')
	print('我是%s' %name)


#运行装饰器
@decorate等价于run = decorate(run)
run = decorate(run)
run(name)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值