dukejunior
——未来程式工作室

01、函数的内部可以调用其它的函数,在函数当中可以调用自己,这个函数就是递归函数,递归会形成一个深度循环!

02、函数的优点:定义简单,逻辑清晰;实际上我们的递归都可以用循环来代替!只是不同的编程思路而已

03、栈溢出:函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

04、尾递归:在函数返回的时候,调用自身本身,并且return语句不能包含任何表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

05、:对于大部分语言来说都没有对尾递归进行优化,Python 同样也是,一样会溢出。递归不常用,运行速度没有循环快

06、闭包函数:必须有内嵌函数;内嵌函数可以引用该嵌套函数上一级namespace(命名空间)中的变量;闭包函数必须返回内嵌函数;

07、闭包的好处:使代码变得简洁;提高代码的拓展性;

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)

返回
posted on 2019-10-13 09:39  公爵二世  阅读(82)  评论(0)    收藏  举报