zoukankan      html  css  js  c++  java
  • 函数------作用域、匿名函数,高阶函数、递归

    一、名称空间

    顾名思义就是存放名字的地方;举例:若变量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)
    
    
    
  • 相关阅读:
    oracle内核参数详解
    oracle分区表原理学习
    expdp导出时报错ora-16000
    【CS224n-2019学习笔记】Lecture 1: Introduction and Word Vectors
    【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
    【SQL必知必会笔记(2)】检索数据、排序检索数据
    【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入
    win10,64位操作系统安装mysql-8.0.16经验总结(图文详细,保证一次安装成功)
    【机器学习实战笔记(3-3)】关于朴素贝叶斯实现代码中的一些错误总结
    【机器学习实战笔记(3-2)】朴素贝叶斯法及应用的python实现
  • 原文地址:https://www.cnblogs.com/Holmes-98/p/14288075.html
Copyright © 2011-2022 走看看