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
    # 解释器认为:如果你在局部作用域对一个变量进行修改了,
    # 你在局部作用域已经定义好这个变量了。
    

  • 相关阅读:
    Verilog 浮点数运算模块
    【MATLAB】设定坐标的轴的范围
    【MATLAB】画平行于坐标轴的曲线
    【Quartus警告】created implicit net for XXX.
    多普勒雷达探测原理
    高斯分布和均匀分布之间的映射关系
    反射设置当前窗体所有控件的Text
    IAR6.1的工程迁移到IAR6.5不能用的解决方法
    C语言实现通用链表初步(二)
    C语言实现通用链表初步(一)
  • 原文地址:https://www.cnblogs.com/nieice/p/11083387.html
Copyright © 2011-2022 走看看