Python--lambda&递归

lambda

  • lambda关键字用于创建匿名函数,lambda函数能接收任意数量参数,只能返回一个表达式的值
  • 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)

  

猜你喜欢

转载自www.cnblogs.com/Mr-chenshuai/p/9954296.html