目录:
一.装饰器:
1.装饰器的定义
2.带有参数的装饰器
3.带有返回值的装饰器
二.递归函数
三.匿名函数
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一.装饰器:
1.装饰器的定义:
一般一个闭包可以作为装饰器,并且闭包的外层函数必须有形参才行。因为作为装饰器时,会将被装饰的函数作为实参代入。
然后会已经将带入实参但还没运行的返回值函数,赋值给被装饰的函数,然后在运行被装饰的函数。
格式:
闭包1
@闭包1的名称
被装饰器函数2
被装饰函数2()
例子:
# 定义装饰器:
def a(func):
print('---------------')
def b():
func()
print('刷漆')
print('买家具')
print('铺地板')
print('精装房')
print('----------------')
return b
@a
def house():
print('毛坯房.....') # 这些步骤等价于house = a(house)
house() # 此时的house就是b
调用结果:
---------------
----------------
毛坯房.....
刷漆
买家具
铺地板
精装房
2.带有参数的装饰器:
当被装饰函数带有形参时, 装饰器的里面的返回值函数也必须是带有形参。
对于只有一个参数的被装饰函数就不看例子了,直接看多参数的例子,因为多参数的可包含单参数
例子:
def c(d):
def e(*args, **kwargs): # 这样写,装饰器就可以变得更具兼容性,对于有着不同个数实参的被装饰函数,都能去装饰
d(*args, **kwargs)
print('很值钱')
print('什么最值钱?')
return e
# 进行装饰g函数
@c
def g(i, k):
print('{}和{}'.format(i, k))
g('房子', '亲情') # 此时的g函数就是e函数
调用结果:
什么最值钱?
房子和亲情
很值钱
3.带返回值的装饰器:
就是装饰器的内部函数带有返回值
例子:
def decorater(func):
def wrapper(*atgs, **kwargs):
r = func(*atgs, **kwargs)
print('预计装修费用是{}'.format(r))
print('刷漆')
print('铺地板')
print('买家具')
print('精装修房子')
return r
return wrapper
@decorater
def house():
print('我是一个毛坯房。。。')
return 20000
r = house() # house就是wrapper
print(r)
调用结果:
我是一个毛坯房。。。
预计装修费用是20000
刷漆
铺地板
买家具
精装修房子
20000
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
二.递归函数:
如果一个函数在内部不调用其它函数, 而自己本身的话, 这个函数就是递归函数
遵循:
1. 必须要有出口
2. 每次递归向出口靠近
例子:
# 使用递归函数打印1到10
def numbers(n):
n += 1
print(n)
if n >= 10:
return
numbers(n) # 函数体内部调用自己的函数
numbers(0)
调用结果:
# 使用递归函数打印1到10
1
2
3
4
5
6
7
8
9
10
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
三.匿名函数:
使用关键词lambda创建的一个单行函数。这种函数省略了用def 声明函数
例子:
sum = lambda a, b: a + b
x = sum(1,2)
print(x)
sum(0, 1)
调用结果:
3