zoukankan      html  css  js  c++  java
  • Day 3-4 函数进阶

    1.名称空间

    定义:Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。是存放变量和值的内存地址的绑定关系的空间.

    在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。
         1、每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量。
         2、每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
         3、还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常。
    命名空间查找顺序
    当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
         1、局部命名空间(locals):特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。
         2、全局命名空间(globals):特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
         3、内置命名空间(builtins):对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
         4、如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,如,NameError: name 'aa' is not defined。
     不同变量的作用域不同就是由这个变量所在的命名空间决定的
    嵌套函数的情况:
         1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索.(locals)
         2、然后是在父函数的命名空间中搜索(enclosing function)
         3、接着是模块命名空间中搜索(globals)
         4、最后在内置命名空间中搜索(builtins)

    上述的查找顺序就是:locals--->enclosing function--->globals--->builtins

     2.闭包

    定义:函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

    1 def func1(x):
    2     def func2(y):
    3         print('x', x)
    4         print('y', y)
    5         return x + y
    6     return func2
    7 
    8 f = func1(3)
    9 print(f(88))

    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

  • 相关阅读:
    关于JSON可能出现的错误,待更/todo
    mongoose的安装与使用(书签记录) 2017
    HTTP的学习记录3--HTTPS和HTTP
    HTTP的学习记录(二)头部
    HTTP(一)概述
    LeetCode 455. Assign Cookies
    LeetCode 453. Minimum Moves to Equal Array Elements
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 447. Number of Boomerangs
    LeetCode 416. Partition Equal Subset Sum
  • 原文地址:https://www.cnblogs.com/lovepy3/p/8685717.html
Copyright © 2011-2022 走看看