• 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()




  • 相关阅读:
    Linux系统调用
    Linux的中断 & 中断和异常的区别
    system v和posix的共享内存对比 & 共享内存位置
    epoll里面mmap释疑
    提高网络效率的总结
    推荐相关学习 & 典型算法、典型特征、典型推荐系统框架
    最大似然法理解
    调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令
    内存屏障 & Memory barrier
    锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁
  • 原文地址:https://www.cnblogs.com/encounter-you/p/10502838.html
Copyright © 2020-2023  润新知