zoukankan      html  css  js  c++  java
  • python notice7 命名空间和函数嵌套

    一、命名空间

      在python解释器开始执行之后,会在内存中开辟一个空间,每当遇到一个变量的时候,就会把变量名和值之间的关系记录下来,但是当遇到函数定义的时候,解释器先把函数名读入到内存中,不管函数内部的变量和逻辑。当函数被调用和访问时,解释器才会根据函数内部声明的变量来开辟变量的内部空间,随着函数执行完毕,这些函数内部变量占用的空间也会随着函数执行完毕而被释放。

      命名空间:存放变量的名字和值的空间。

    命名空间分类:

      1.全局命名空间:直接在py文件中, 函数外声明的变量都属于全局命名空间。  

      2.局部命名空间:在函数中声明的变量会放在局部命名空间。

      3.内置命名空间:存放python解释器内置函数或者变量的空间。

    加载顺序:

      1.内置命名空间。

      2.全局命名空间。

      3.局部命名空间。(函数被执行时)

    取值顺序:

      1.局部命名空间。

      2.全局命名空间。

      3.内置命名空间。

    二、作用域:作用范围

      1.全局作用域:全局命名空间 + 内置命名空间

      2.局部作用域:局部命名空间

      可通过globals()函数查看全局作用域中的内容;通过locals()函数查看局部作用域中的变量和函数信息。

    a = 10
    def func():
        a = 40
        b = 20
        print(globals()) # 打印全局作⽤用域中的内容
        print(locals()) # 打印局部作⽤用域中的内容
    func()

    三、函数的嵌套

      在函数内部定义函数,并调用。

    #函数的嵌套
    def fun1():
        print(222)
        def fun2():
            print(666)
        print(444)
        fun2()
        print(888)
    print(333)
    fun1()
    print(555)

    关键字global和nonlocal使用:

      global:在函数内部引入全局变量,同时可以修改全局变量。

      nonlocal:在函数内部中,内层函数访问外层函数中的局部变量,也可以对其修改。

    a = 100
    def func():
        global a     #引入全局变量a
        a = 28      #修改全局变量a                 
        print(a)     #28
    func()
    print(a)    #28
    a = 10
    def func1():
        a = 20
        def func2():
            nonlocal a    #引入父级函数变量
            a = 30         #修改父级函数变量
            print(a)
        func2()
    print(a)    #10
    func1()    #30           
  • 相关阅读:
    C# Task.Run 和 Task.Factory.StartNew 区别
    数据库面试题(实时更新)
    python面试题(实时更新)
    opencv简介以及环境搭建
    Django分页器
    django的开发环境
    Django简介以及MVC模式
    Virtualbox修改虚拟机分配内存的大小
    深浅拷贝
    react-native-typescript-项目环境搭建
  • 原文地址:https://www.cnblogs.com/xiaolu-fan/p/11230270.html
Copyright © 2011-2022 走看看