zoukankan      html  css  js  c++  java
  • python 基础(函数 命名空间和作用域,嵌套和作用域链,闭包)

    1,函数命名空间和作用域

       1,命名空间

         内置命名空间: -----python解释器   print()   input()   list    tuple

             就是python解释器一启动就可以使用的名字存储在内置命名空间中

             内置的名字在启动解释器的时候被加载进内存里

        全局命名空间-----我们写的代码但不是函数中的代码
          是在程序从上到下被执行的过程中依次加载进内存中
          放置了我们设置的所有变量名
        局部命名空间-----函数
          就是函数内部定义的名字
          当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就消失了

        在局部:可以使用全局,内置命名空间中的名字
        在全局:可以使用内置命名空间中的名字,但是不能使用局部中使用
        在内置:不能使用局部和全局的名字

        在正常情况下,直接使用内置名字
        当我们在全局定义了和内置名字空间中同名的名字,会使用全局名字
        当自己有的时候 就不会找上级要了 内置没有就报错
       2,作用域
        全局作用域---作用在全局---内置和全局名字空间中的名字都属于全局作用域---globals()
        局部作用域---作用在局部---函数(局部名字空间中的名字属于局部作用域)---locals()
    a = 1
    b = 2
    def func()
        x = 'aaa'
        y = 'bbb'
        print(locals())
    func()
    print(globals())#  永远打印全局的名字
    print(locals()) #本地的  输出什么,根据 locals所在位置

    2,函数的嵌套和作用域链

      1,函数的嵌套----内部函数可以使用外部函数的变量

     a = 1
     def outer():
         a = 1
         def inner():
             a = 2
             def inner2():
                 nonlocal a  #声明了一个上面第一层局部变量,离当前最近一层
                 a += 1   #不可变数据类型的修改
             inner2()
             print('##a## : ', a)
         inner()
         print('**a** : ',a)
    
     outer()
     print('全局 :',a)

          函数名:----本质是一串内存地址

         func()               是内存地址

          func2 = func     可以赋值

          l = [func,func2]  可作为容器类型的元素

         return f                可作为函数的返回值

         qqxing = wahaha(func)   可作为函数的参数

      2,作用域链:

         小范围用变量的时候,先从自己的名字空间找,

          找不到就一层一层向外层找,知道找到为止。 找不到就报错。

    3,闭包---内部函数使用外部函数的变量
    def outer():
        a = 1
        def inner():
            print(a)
        return inner
    
    i = outer()
    i()




  • 相关阅读:
    阿里巴巴FastJSON使用实例
    JSON知识点
    java序列化和反序列化
    JAVA里的VO、BO、PO分别指什么?
    Oracle基础语句练习记录
    maven命令
    maven官方教程
    linux下开启、关闭、重启mysql服务
    linux常用命令记录
    动态网页项目无法启动
  • 原文地址:https://www.cnblogs.com/encounter-you/p/10502838.html
Copyright © 2011-2022 走看看