函数------作用域、匿名函数,高阶函数、递归

一、名称空间

顾名思义就是存放名字的地方;举例:若变量X=1,1存放在内存中,是存放名字X与1绑定关系的地方。

名称空间有三种:

1.locals:函数内的名称空间,包括局部变量和形参

2.globals:全局变量,函数定义锁在模块的名字空间

3.builtins: 内置模块的名字空间

二、作用于的查找顺序

LEGB顺序

locals--->enclosing(外部嵌套函数的名称空间)--->globals--->builtins

一、作用域

  全局作用域:全局存活,全局有效;局部作用域:局部存活,局部有效。

  1.python中函数就是一个作用域,局部变量是放在其作用域中的  

  2.函数定义完成时,作用域已经生成,作用域会一层一层往上找 

age = 12
def func():
    age = 22
    def func1():
        print(age)
    return func1  # 函数名可以是返回值
val = func()
val()

>>>>>22

global  声明变量(全局)

nonlocal  修改函数外层函数包含的变量对应的值(不可变类型)【一层一层往外找】

二、匿名函数

  1.节省代码量

  2.只支持简单的语境(三元运算)

应用场景:用于临时调用一次的场景;更多的是与其他函数配合使用。

def func(x,y):
    if x > y:
        return x*y
    else:
        return x/y
print(func(6,3))
>>>>18

func1 = lambda x,y:x*y if x > y else x/y  # 声明一个函数,调用时需要赋值
print(func1(6,3))
>>>>18

三、高阶函数

变量可以指向函数,函数的参数可以接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数就称为高阶函数。

  只需要满足其中任意一个条件,就可以称为高阶函数:

  1.接受一个或者多个函数作为输入

  2.return 返回另一个函数

四、递归介绍

4.1 函数在调用时,调用自己。递归的本质就是循环。

def func(n):
    print(n)
    func(n+1)
func(1)

递归的两个阶段:

回溯:一层一层的调用下去

递推:满足某种结束条件,结束递归调用,然后一层一层返回

4.2 递归的作用

#  阶乘的演示
def func(n):
    if n == 1:
        return 1
    return n * func(n-1)
print(func(4))
def func(n):
    v = int(n / 2)
    print(v)
    if v == 0:
        return None
    func(v)
func(10)

4.3 特点:

    1.必须有一个结束条件,要不就会变成死循环,最终撑爆系统

    2.每一次进入更深一层次的递归时,问题规模相比比上一次递归都应有所减少

    3.递归执行效果不高,递归层次过多会导致栈溢出

4.4 尾递归优化

定义:上一层或者下一层循环一本层循环没有应用关系的

def func(n):
    print(n)
    return func(n+1)
func(1)


原文地址:https://www.cnblogs.com/Holmes-98/p/14288075.html