zoukankan      html  css  js  c++  java
  • 函数命名空间、作用域与闭包函数

    补充之前落下的知识点
    函数返回值得注意点

    1. 返回值没有类型限制
    2. 返回值没有个数限制
      _. 多个值用逗号分隔开,返回元祖
      _. 返回单个值返回本身
      _. 没有返回值就返回None
    3. return可以返回值,并且还能结束函数执行的功能,可以有多个return,一旦运行return就终止。

    函数对象#

    1. 可以被引用
    2. 可以当做参数传给另外一个函数
    3. 变量值可以当做函数的返回值
    4. 函数可以当做容器类型的元素

    名称空间与作用域

    什么是名称空间
    通俗的理解就是存放名字的地方,存放什么名字呢?存放的是变量名的空间。在之前已经知道变量名和内存中值得内存地址绑定在一起,那么变量名和绑定的内存地址存在哪呢。
    在python中有三种名称空间存放的就是各种变量名和它所绑定的内存地址。分别是:内置名称空间、全局名称空间、局部名称空间。
    名字的查找顺序
    局部名称空间--》全局名称空间--》内置名称空间,这三步之后如果还没找到的话就会报 变量名未定义的错误。
    *需要注意的是:在全局无法查看局部的名称,在局部可以查看全局的名称。如下:

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

    输出结果为 1

    x = 1
    def func():
        x = 2
        print(x)
    func()
    

    输出结果为 2

    作用域

    什么是作用域
    作用域即变量名称的作用范围。

    1. 全局作用域:(内置名称空间与全局名称空间属于该范围),全局存活,全局有效。
    2. 局部作用域:(局部名称空间属于该范围),临时存活,局部有效。

    注意:作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关

    LEGB代表名字查找顺序
    locals--》enclosing function--》globals--》builtins_

    1. locals是函数内的名字空间,包括局部变量和形参;
    2. enclosing是外部嵌套函数的名字空间(闭包);
    3. globals全局变量,函数定义所在模块的名字空间;
    4. builtins内置模块的名字空间。

    闭包函数

    什么是闭包函数
    内部函数包含对外部作用域而非全局作用域的引用
    闭包的意义
    返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得该函数无论在何处被调用,优先使用自己外层包裹的作用域。

  • 相关阅读:
    ==和equals
    Fastjson toJSONString 碰到的一个问题
    Java之旅之第一个Java项目[Sping+ Spring MVC + MyBatis] 项目框架
    Java之旅之第一个Java项目[Sping+ Spring MVC + MyBatis] 项目配置
    Java之旅之第一个Java项目[Sping+ Spring MVC + MyBatis] org.springframework.web相关源码
    Java之旅之第一个Java项目[Sping+ Spring MVC + MyBatis] 项目背景
    centos6 yum源不可用问题解决
    ORACLE修改最大连接数
    Docker学习笔记(二):Docker镜像
    Mysql5.7慢日志时间与系统时间相差8小时问题的解决
  • 原文地址:https://www.cnblogs.com/zuanzuan/p/9709576.html
Copyright © 2011-2022 走看看