什么时候使用nonlocal关键字? [复制]

2024-04-27

我不明白为什么我可以在这里使用系列变量:

def calculate_mean():
    series = []
    def mean(new_value):
        series.append(new_value)    
        total = sum(series)
        return total/len(series)
    return mean

但我不能在这里使用 count 和 Total 变量(赋值前引用的变量):

def calculate_mean():
    count = 0
    total = 0
    def mean(value):
        count += 1
        total += value
        return total/count
    return mean

仅当我使用像这样的非本地关键字时它才有效:

def calculate_mean():
    count = 0
    total = 0
    def mean(value):
        nonlocal count, total
        count += 1
        total += value
        return total/count
    return mean

这就是我使用calculate_mean()的方式

mean  = calculate_mean()
print(mean(5))
print(mean(6))
print(mean(7))
print(mean(8))

您面临的是,在一种情况下,变量中有一个可变对象,并且您对该对象进行操作(当它是列表时) - 而在另一种情况下,您正在操作一个不可变对象并使用赋值运算符(增强分配+=) .

默认情况下,Python 会定位所有非局部变量read并相应地使用 then - 但如果在内部作用域中分配了一个变量,Python 会假定它是一个局部变量(即内部函数的局部变量),除非它被显式声明为非局部变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候使用nonlocal关键字? [复制] 的相关文章

随机推荐

  • 如何在navigationStart路由器事件中暂停路线更改

    在我的应用程序中 我有从包 节点模块 公开的路由 因此 我无法将 canActivate 或 canDeactivate 用于节点模块内定义的路由 因此 我开始订阅应用程序组件中的所有路线更改 并根据条件将用户重定向到不同的路线 由于条件有
  • PEX协议(磁力链接)如何找到它的第一个IP?

    我试图了解磁力链接如何工作 因为我读过他们使用 DHT 和 PEX 来获取对等点 但如果我是网络中的新节点 如何才能找到仅具有哈希值的对等点文件 它不是总是需要一个到已知主机的链接吗 Thanks Bittorrent DHT 可以通过多种
  • 如何阻止 Apache CXF 发送响应消息?

    如果给定的 SOAP 标头元素具有给定值 例如 如果标头标记 response 的值为 0 我根本不希望 Apache CXF 返回响应 我怎样才能做到这一点 CXF 似乎假设所有呼叫都会收到响应 我知道这在 Web 服务上下文中看起来很奇
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • 如何在 Bullet 物理引擎中对物体应用旋转?

    我有旋转值 滚动 俯仰 偏航 我想将这种旋转应用于身体 但我不知道该怎么做 最直接的方法是通过运动状态或直接设置来直接设置刚体的世界变换 要获得横滚 俯仰和偏航的变换 您可以使用 btRigidBody rigidBody btTransf
  • 检查变量是否为 double 数据类型

    我需要检查我拥有的变量是否属于该数据类型double 这是我尝试过的 try double price Convert ToDouble txtPrice Text catch FormatException MessageBox Show
  • cs0030:无法生成临时类

    我有一个 Web 服务 当我尝试生成它的对象时 出现以下错误 无法生成临时类 结果 1 错误 CS0030 无法将类型 ShortSell ShortSellRQOriginDestinationInformationFlightSegme
  • 消息通知产生“此内容无法显示”

    我正在通过网络挂钩向 Slack 发送消息 使用单个 文本 JSON 元素的消息通知可通过适用于 OS X 和 iOS 的 Slack 应用程序生成正确的通知文本 频道中的消息文本也是正确的 但是 当使用新的 阻止 方法时 通知文本变为 无
  • 发布时错误元数据文件dll无法找到CSC

    我有一个 Visual Studio 解决方案 其中包含多个项目 特别是 DotNet5 asp net 应用程序 其中有多个 netstandard 2 0 引用 它在调试器中构建并运行良好 但不断抛出元数据错误 它不断特别引用在 net
  • 谷歌分析 SDK iOS10

    我已经从 cocoa pod 版本 3 14 安装了 Google Analytics id
  • 如何在Spring boot中使用注释来使用参数解析器?

    我想用argument resolvers在 Spring 启动中 我该怎么办 它是在 XML 中完成的 如下所示
  • 快速移动的球与鼠标控制的球拍的碰撞检测问题

    在统一中 我有一个应该击球的球拍 并且球拍直接由鼠标控制 即鼠标使用鼠标轴移动球棒并使用 translate 函数移动球拍 我预计 Unity3d 的物理特性不会直接通过鼠标正确地转换球拍的运动并相应地影响球 我必须编写一些自定义的内容 结
  • 为什么负边距会影响我的页面宽度?

    请参考以下内容example http jsfiddle net wdm954 Fcznp 9 其中 200px 宽的外部 div 旨在确定我们的页面宽度 它包含一个 400px 宽的内部 div 但左 右负边距为 100px 我预期的最终
  • C++ / C++11 中的函数组合

    我目前正在使用 C 11 编写一些需要大量函数组合的密码算法 我必须处理两种类型的构图 自行编写一个函数 次数可变 数学上 对于某个函数 F F n x F n 1 o F x F n 1 F x 将不同的函数组合在一起 例如 对于某些相同
  • Jackson @JsonRawValue 获取地图的值

    我有以下 Java bean 类 使用 Jackson 将其转换为 JSON public class Thing public String name JsonRawValue public Map content new HashMap
  • 将 asp.net 5 测试放在单独的程序集中

    我使用 Microsoft AspNet TestHost 来托管 xunit 集成测试 只要测试与 asp net 5 solution 位于同一项目中 一切都会正常进行 但我想将测试放入单独的程序集中 将它们与解决方案分开 但是 当我尝
  • 如何处理 pcntl_fork(): 错误 35?

    我有 php7 CLI 守护进程 它连续解析文件大小超过 50M 的 json 我试图使用 pcntl fork 的单独进程将每 1000 个解析数据条目保存到 mysql 对于约 200k 行 它工作得很好 然后我得到pcntl fork
  • “修补”rails 渲染函数来编辑默认选项

    当我在 Rails 中渲染 xml 时 我总是想要 dasherize gt false 选项 有没有办法将其设置为应用程序范围的默认值 当然无需修改 Rails 源代码 也许一个渲染函数以某种方式优先于第一个函数 然后使用此选项调用它 这
  • 如何隔离特定的颠覆修订版?

    我有一个已提交给 SVN trunk 的修订版 我想回滚它 但是 我想以某种方式保留更改 例如分支甚至补丁文件 有什么建议么 反向合并 我认为这就是这个术语 提交 仅此而已 对于 反向合并 部分 TSVN 有一个很酷的功能 称为 恢复到此版
  • 什么时候使用nonlocal关键字? [复制]

    这个问题在这里已经有答案了 我不明白为什么我可以在这里使用系列变量 def calculate mean series def mean new value series append new value total sum series