zoukankan      html  css  js  c++  java
  • Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容:
    1. 函数对象
    函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用
    1.可以被引用
    2.可以当做参数传给另一个函数
    3.可以当做一个函数的返回值
    4.可以当做容器类型的元素
    2. 函数嵌套
    函数嵌套分为两大类:
    1.函数的嵌套调用: 在调用一个函数过程中,其内部代码又调用了其他函数
    2.函数的嵌套定义: 一个函数内部又定义了另一个函数

    3.名称空间与作用域(******)
    1.什么是名称空间namespaces:
    名称空间就是用来存放名字与值内存地址绑定关系的地方(内存空间)
    但凡查找值一定要通过名字,访问名字必须去查找名称空间
           

    2.名称空间分为三大类
    1.内置名称空间:存放的是Python解释器自带的名字
    例如:
    len
    max
    print
    2.全局名称空间: 存放的是文件级别的名字
    例如:以下名字中xyzfoo都会存放于全局名称空间中
    x = 1
    y = 2
    if x == 1:
    z = 3

    while True:
    b = 4
    break


    def foo():
    m = 3

    3.局部名称空间: 在函数内定义的名字
    例如:
    foo内的m这个名字一定是存放于一个局部名称空间中

    生命周期:
    内置名称空间: 在解释器启动时则生效,解释器关闭则失效
    全局名称空间: 在解释器解释执行Python文件时则生效,文件执行完毕后则失效
    局部名称空间: 只在调用函数时临时产生该函数的局部名称空间,该函数调用完毕则失效
    加载顺序:
    内置->全局->局部当初定义函数的位置去确定名字的查找关系

    查找名字的顺序:
    基于当前所在位置往上查找
    假设当前站在局部,查找顺序: 局部->全局->内置
    假设当前站在全局,查找顺序: 全局->内置

    名字的查找顺序,在函数定义阶段就已经固定死了(即在检测语法时就已经确定了名字的查找顺序),与函数的调用位置无关
    也就是说无论在任何地方调用函数,都必须回到当初定义函数的位置去确定名字的查找关系

    作用域:
    域指的是范围,作用域指的就是作用的范围,分为两种
    全局作用域:包含的是内置名称空间与全局名称空间中的名字
    特点: 全局有效,全局存活
    局部作用域:包含的是局部名称空间中的名字
    特点:局部有效,临时存活
    global: 在局部声明一个名字是来自于全局作用域的,可以用来在局部修改全局的不可以变类型
    nonlocal: 声明一个名字是来自于当前层外一层作用域的,可以用来在局部修改外层函数的不可变类型

    4.闭包函数:
    1.什么是闭包函数
    闭:指的是闭包函数是定义在一个函数内部的函数
    包:该内部函数包含对外层函数作用域名字的引用
    需要结合函数对象的概念将闭包函数返回到全局作用域去使用,从而打破函数的层级限制
    2.为何要用闭包函数
    闭包函数提供了一种为函数体传值的解决方案
    3.如何用闭包函数













  • 相关阅读:
    字符串_操作
    Error: Cannot find module 'webpack-cli/bin/config-yargs'
    ElementUI-Table 表头无法编辑问题
    ElementUI-Cascader组件同时支持懒加载和选择任意一级 问题踩坑
    vue强制刷新子组件
    footer部分,当页面主题内容不满一屏时,始终位于页面底部
    未知宽高的元素水平垂直居中方法总结
    fix元素居中
    link和@import引入css的区别
    Jquery拓展方法
  • 原文地址:https://www.cnblogs.com/earon/p/9396373.html
Copyright © 2011-2022 走看看