Python--lambda&递归

Posted mr-chenshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

  

 

以上是关于Python--lambda&递归的主要内容,如果未能解决你的问题,请参考以下文章

CSP核心代码片段记录

带有 if 但没有 else 的 Python lambda

JavaScript - 代码片段,Snippets,Gist

对这个带有 & 不带 = 的代码片段返回类型感到非常困惑

Sphinx - 在代码块片段中使用省略号 (...)

executePendingTransactions 的递归入口