代码之家  ›  专栏  ›  技术社区  ›  Shane Ang

封闭局部范围内的变量与全局范围内的变数-Python

  •  1
  • Shane Ang  · 技术社区  · 8 年前

    嗨,伙计们,我不知道为什么 find_average() 被称为, total = 20 正在全局范围内用于 find_total() 函数,而不是 total = 10 在封闭范围内? 提前感谢您的任何见解和帮助!

    total = 20
    
    def find_total(l):
        return total
    
    def find_length(l):
        length = len(l)
        return length
    
    def find_average(l):
        total = 10
        return find_total(l) / find_length(l)
    
    
    average = find_average(example_list)
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   MisterMiyagi    8 年前

    每个函数都有自己的作用域。它从函数本地、内部范围开始,然后向外通过封闭函数,直到到达全局(模块)范围。此顺序取决于函数的范围 定义于 用于变量查找。

    find_total ,这是 <module>.find_total.<locals> <module> 因此,无论何时 查找_总计 运行时,它将查找 total 在其本地范围内,失败,并在全局范围内查找。那里 total == 20 .

    内部范围 find_average 仅限于 查找平均值 。都不是全局范围, 查找_总计 find_length 查找平均值 查找_总计 ,应该通过一个参数来完成。


    或者,如果 查找_总计 可以在内部定义 查找平均值 这边 查找_总计 通过搜索序列解析名称 <module>.find_average.<locals>.find_total.<locals> -> <module>.find_average.<locals> -> <module> .

    total = 20
    
    def find_length(l):
      length = len(l)
      return length
    
    def find_average(l):
      total = 10
      def find_total(l):
        return total
      return find_total(l) / find_length(l)
    
     average = find_average(example_list)
    

    这将使 查找_总计 无法接近 从外部 查找平均值 !