标签:必须 匿名 print 大小 间接 自己 str fun 栈帧
lambda
格式:
# 普通函数 def fooo(): return x**2 print(foo(3)) # 使用lambda实现 lambda x : x**2 #<function <lambda> at 0x7fa1c6a17488> # x 是参数 # x**2 相当于 return x**2
lambda函数地址
print(lambda x:x**2) # <function <lambda> at 0x7fa1c6a17488>
给lambda起名字
f = lambda x : x**2 f(3) # 9 # 这样人为的加了个名字,没什么意义
使用:
def foo(n): return lambda x:x+n res = foo(15) print(res(6))
递归
递归调用:调用一个函数的过程中直接或者间接地调用了该函数本身
# 直接调用: def func(): print(‘hello‘) func() func() #无限递归,内存会把所有经历过的递归保存,内 存溢出 # 间接调用: def foo(): print(‘hello‘) bar() def bar(): print(‘haha‘) foo() foo()
递归特性:
递归效率低,需要在进入下一次递归时保留当前的状态
解决办法是尾递归,就是在函数最后一步(注意不是最后一行)调用自己
python没有尾递归,它对递归的层级做了限制
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
def age(n): if n ==5: return 18 return age(n+1)+2 print(age(1))
例:
l=[1,[2,3,[4,5,[6,7,[8,9,[10,11,[12,13]]]]]]] def func(l): for i in l: if isinstance(i,list): func(i) else: print(i) func(l)
标签:必须 匿名 print 大小 间接 自己 str fun 栈帧
原文地址:https://www.cnblogs.com/Mr-chenshuai/p/9954296.html