zoukankan      html  css  js  c++  java
  • python作用域

    作用域

    1. 从空间角度研究函数

      全局名称空间: py文件运行时开辟的,存放的是执行的py文件(除去函数内部)的所有的变量与值(地址)的对应关系,整个py文件结束之后,才会消失。

      临时(局部)名称空间: 函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失。

      内置名称空间:input,print,内置函数等。

    2. 取值顺序加载顺序

      加载顺序:上面这三个空间,谁先加载到内存。

      内置名称空间 ----》 全局名称空间 ----》 (函数执行时)临时名称空间

      取值顺序:(就近原则)

    3. 作用域

      全局作用域:全局名称空间,内置名称空间。

      局部作用域:局部名称空间。

    关键字:global,nonlocal

    # count = 0
    #
    # def func():
    #     count += 1
    # func()
    #报错
    # UnboundLocalError: local variable 'count' referenced before assignment
    # 解释器认为:如果你在局部作用域对一个变量进行修改了,
    # 你在局部作用域已经定义好这个变量了。
    

    global

    1. 可以在局部作用域声明一个全局变量。

      # 这是剪切
      # def func():
      #	在全局定义一个变量name
      #     global name
      #     name = 1
      #
      #     print(globals())
      #     # print(locals())
      #     name += 1
      #     print(globals())
      #
      #
      # func()
      # # print(name)
      # print(globals())
      
    2. 可以修改全局变量。

      # count = 0
      #
      # def func():
      #     global count
      #     count += 1
      #
      # print(count)
      # func()
      # print(count)
      

    nonlocal

    1. 不能操作全局变量。
    2. 可以对父级作用域的变量进行修改,并且在当前作用域创建(复制)一份此变量。
    # 这是复制
    # def func():
    #     count = 0
    #     def inner():
    #         nonlocal count
    #         count += 1
    #         print(count)
    #         print(locals())
    #     inner()
    #     print(locals())
    # func()
    # UnboundLocalError: local variable 'count' referenced before assignment
    # 解释器认为:如果你在局部作用域对一个变量进行修改了,
    # 你在局部作用域已经定义好这个变量了。
    

  • 相关阅读:
    判断两个数组是否相等
    IIS应用程序池性能分析
    配置Windows Update,补丁更新
    正则表达式从右往左进行匹配(Regex)
    OpenSSL
    openssl用法详解
    OpenSSL生成公钥私钥***
    HTTP认证与https简介
    单机至亿级流量大型网站系统架构的演进过程
    程序员常用英语词汇
  • 原文地址:https://www.cnblogs.com/nieice/p/11083387.html
Copyright © 2011-2022 走看看