01、函数的内部可以调用其它的函数,在函数当中可以调用自己,这个函数就是递归函数,递归会形成一个深度循环!
02、函数的优点:定义简单,逻辑清晰;实际上我们的递归都可以用循环来代替!只是不同的编程思路而已
03、栈溢出:函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
04、尾递归:在函数返回的时候,调用自身本身,并且return语句不能包含任何表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
05、:对于大部分语言来说都没有对尾递归进行优化,Python 同样也是,一样会溢出。递归不常用,运行速度没有循环快
06、闭包函数:必须有内嵌函数;内嵌函数可以引用该嵌套函数上一级namespace(命名空间)中的变量;闭包函数必须返回内嵌函数;
08、装饰器:写好函数时,想要增添一个需求,让函数更加细致,就可以用到装饰器了。使用@语法糖语法更简洁
09、执行顺序:先返回内嵌函数;有参数直接传参给内嵌函数;执行内嵌函数
闭包函数
def outer(num):
def inner(num_in):
print('inner,num_in is %d'%num_in)
return num+num_in
return inner
# a 就相当于 inner
a = outer(20)# inner
# print(a)
#a(200)==inner(200)
print(a(200))
返回装饰器(通用)
def outer(func):
def inner(*args,**kwargs):
# func(*args,**kwargs)相当于func1(5,5)
c = func(*args,**kwargs)
print(c)
return inner
@outer
#func1 = dec(func1)
def func1(a,b=1):
return a*b
func1(5,5)
返回
浙公网安备 33010602011771号