09 匿名函数函数作用域闭包递归

Posted zcmq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了09 匿名函数函数作用域闭包递归相关的知识,希望对你有一定的参考价值。

匿名函数(lambda)

语法规则:

lambda 参数:表达式

filter(lambdax: x>10, li)

匿名函数:可以赋给一个变量,重复使用。

fun1 = lambda x: x * 10
print(fun1(10))
打印结果: 100

fun = (lambda x: x * 10)(5)
print(fun)
打印结果: 50

函数作用域

01外部不能访问函数内部变量:

def fun1():
x = 1
print(x)

02函数内部能够访问函数外部变量:


x = 123
def fun2():
print(x)

03函数里面不能修改外部变量:


x = 123
def fun3():
x = x + 1
print(x)

04函数里面和函数外部变量名相同:


x = 123
print(x,id(x))
def fun1():
  x = 456
  return x,id(x)
a = fun1()
print(a)

函数内部:函数内部的变量,作用域只在函数内部,函数内部不可以直接更改函数外部的变量

global: 函数内部如果需要改变全局变量,就需要使用global修饰变量

实例:

x = 123
def fun1():
    global x
    x +=1
    return x
b = fun1()
print(b)

nonlocal: 在函数嵌套函数的情况下,同样也有函数作用域的问题,但是python3中提供了方便,只需要使用nonlocal就可以在里层函数内部修改外部函数变量。多层函数嵌套,nonlocal只修改上一层函数嵌套的值。

实例:

def fun2():
    x = 123
    def fun3():
        nonlocal x
        x +=1
        return x
    return fun3()
a = fun2()
print(a)

闭包

内嵌函数:

def fun1():
    print(fun1()在被调用)
?
    def fun2():
        print(fun2()在被调用)
?
    fun2()
?
?
fun1()
?

闭包:

def func1():
    print(外层函数)
?
    def func2():
        print(内层函数)
        return 1 + 1
?
    return func2()
?
?
result = func1()
print(result)
?
打印结果:
外层函数
内层函数
2

闭包是函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包

闭包是概念,不是某种函数类型,和递归的概念类似,就是种特殊的函数调用

闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁

递归函数

递归中可以函数自身调用自身,但是使用时类似于条件循环一样,要有递归的终止条件

递归实例:

def fun1():
    print(金钱 == 爱情)
    return fun1()
    
    
fun1()

阶乘:

def func(a):
    if a == 1:
        return a
    else:
        return func(a - 1) * a
        # result func(a - 1) + a    实现累加


result = func(5)
print(result)

打印结果:120

 

以上是关于09 匿名函数函数作用域闭包递归的主要内容,如果未能解决你的问题,请参考以下文章

python 函数-作用域-匿名函数-闭包-装饰器

python 函数-作用域-匿名函数-闭包-装饰器

python 函数-作用域-匿名函数-闭包-装饰器

javascript函数作用域闭包以及匿名函数2

JavaScript中作用域链和闭包

Javascript——闭包作用域链