• 10-函数命名空间,作用域,嵌套,闭包


    函数命名空间,作用域,嵌套,闭包

    复习:

    函数的优点:可读性强,复用性强

    函数如何定义:

    def 函数名():
        # 函数体
        # return 返回值

    所有的函数 只定义不调用就一定不执行,函数需要先定义,后调用

    调用函数:

    函数名()  # 不接收返回值
    返回值 = 函数名() # 接收返回值

    return返回值有几种情况:

    • 没有返回值:默认返回None
      •   不写return : 函数内的代码执行完毕自动结束
      •         只写return : 结束一个函数
      •         return None         
    • 返回一个值: 结束了函数且返回一个值
    • 返回多个值:
      •   多个值之间用逗号隔开,接收的时候可以用一个变量接收,这个变量print的时候,就是一个元祖
      •        多个值之间用逗号隔开,也可以用多个变量接收,每个变量的值为对应的值的结果

    参数:

    • 形参: 定义参数的时候
      •   位置参数: 必须传
      •        *args  : 动态参数,可以接收多个按位置传入的参数
      •         默认参数: 可以不传----因为在对应的位置的参数有了默认的值了
      •         **kwargs:     动态参数  可以接收多个关键字传入的参数
    • 实参: 调用函数的时候
      •   按照位置传参数
      •        按照关键字传参数
        •   可以混合用,位置参数必须在关键字参数前面
        •         不能对一个参数重复赋值

     新内容

    函数的命名空间

    有三种:

    内置命名空间:python解释器一启动,加载到内存里的变量所在的范围,可以直接调用

    全局命名空间: 在函数外部的空间

    局部命名空间:在函数内部的空间

    函数的作用域:

    全局作用域:内置和全局命名空间的变量都属于全局作用域,作用在全局

    局部作用域:函数内部的变量属于局部作用域,作用在局部

    变量:

    全局变量:在函数外部定义的变量,作用范围:整个程序

    局部变量:在函数内部定义的变量,作用范围:所在的函数

    global ,nolocal , globals,locals,

    global : 在函数内部想要修改全局变量的时候,使用global

    nolocal:  在嵌套函数中调用上一层函数的变量

    globals: 查看全局和内置空间的变量

    locals:  查看当前所在空间范围的变量

     嵌套函数

    # 函数嵌套的定义
    # 内部函数可以使用外部函数的变量
    a = 1
    def outer():
        a = 1
        def inner():
            a = 2
            def inner2():
                nonlocal  a # 声明了一个上面第一层的局部变量
                a += 1
            inner2()
            print('##a##',a )
        inner()
        print('##2##' , a )
    outer()
    print('全局a',a)

    高阶函数:

    需要满足的条件:满足任意一个就行

    接收一个或多个函数作为输入

    return 返回另一个函数

     递归函数

    定义:在函数内部,可以调用其他函数,如果一个函数在内部调用自己本身,

    特性:

    必须有一个明确的条件

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

    递归效率不高,递归层次过多会导致栈溢出

    菜鸟的自白
  • 相关阅读:
    《Attack ML Models
    对抗攻击基础知识(完结)
    解决github release下载慢/下载失败的问题
    《Effective Python:编写高质量Python代码的59个有效方法》读书笔记(完结)
    MacBook常用软件
    解决python3读写中文txt时UnicodeDecodeError : 'ascii' codec can't decode byte 0xc4 in position 5595: ordinal not in range(128) on line 0的问题
    Shell中的函数库
    Mysql登录报1045错误
    宝塔面板关键目录解析
    CentOS7 yum报 Cannot retrieve metalink for repository: epel/x86_64. Please verify its path解决方法
  • 原文地址:https://www.cnblogs.com/lzjloveit/p/10524453.html
Copyright © 2020-2023  润新知