标签:必须 匿名 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