python:绑定如何工作

2023-11-21

我想了解 python 中的变量绑定到底是如何工作的。让我们看看这个:

def foo(x):
    def bar():
        print y
    return bar

y = 5
bar = foo(2)
bar()

这打印 5 对我来说似乎是合理的。

def foo(x):
    def bar():
        print x
    return bar
x = 5
bar = foo(2)
bar()

这会打印 2,这很奇怪。在第一个示例中,python 在执行期间查找变量,在第二个示例中,则在创建方法时查找变量。为什么会这样呢?

需要明确的是:这非常酷并且完全按照我的意愿工作。但是,我对内部 bar 函数如何获取其上下文感到困惑。我想了解幕后发生了什么。

EDIT

我知道,局部变量具有更高的优先级。我很好奇,python 如何知道在执行过程中从我之前调用过的函数中获取参数。bar创建于foo and x已不存在了。它已经绑定了这个x创建函数时的参数值?


第二个例子实现了所谓的closure。功能bar正在引用变量x从它周围的上下文,即函数foo。这先于对全局变量的引用x.

另请参阅这个问题你能解释一下闭包(因为它们与 Python 相关)吗?

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

python:绑定如何工作 的相关文章

随机推荐

  • 逗号分隔列表与数组,最后一个元素之前带有“and”

    我有一个数组 number list 具有动态生成的值列表 数组中至少有 1 个值 最多 4 个 目前 我有一个很好的方法来使用这个来创建逗号分隔的列表 comma list implode number list 但是 我想遵循英语惯例
  • NSObject.m 的源代码在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在尝试寻找来源NSObject m 我想比较 ARC 前后的实现retain and release 我看过http www opensourc
  • Angular 6 反应形式上的两种方式绑定

    我正在尝试创建一个复杂的反应形式 其中包含填充有数据对象的嵌套组件 我试图实现的行为与模板驱动表单的双向数据绑定非常相似 当用户编辑表单的输入时 数据对象正在更改自动地 但与模板驱动的表单相反 我不能使用 ngModel 因为它在 Angu
  • 减慢 Twilio 的 TwiML“Say”命令以处理文本转语音数字

    我创建了一个 Twilio 应用程序 其中涉及使用 Twilio 的 TwimL
  • 使用 mocha 的内置承诺支持测试失败的承诺[重复]

    这个问题在这里已经有答案了 我应该如何用摩卡和柴来测试我的承诺是否失败了 我很困惑 因为我最初认为我应该使用 摩卡承诺 但那 软件包现已弃用 我正在使用 mocha 2 1 0 建议 只需使用摩卡中现在内置的承诺测试即可 看 https g
  • 如果第一个项目被移动,如何防止 LazyColumn 自动滚动

    我使用 Jetpack Compose UI 构建一个简单的 TODO 应用程序 这个想法是有一个可以选中或取消选中的任务列表 并且选中的任务应该位于列表的末尾 一切工作正常 除了当我检查屏幕上的第一个可见项目时 它会随着滚动位置向下移动
  • Python 和 MS Word:将 .doc 转换为 .docx?

    我发现了几个与我的问题相似的问题 但没有一个答案接近我的需要 规格 我正在使用 Python 3 没有 MS Word 我的编程机运行的是 OS X 云机也是 linux ubuntu 我在用着python docx从a中提取值 doc每晚
  • dot / Graphviz 的更紧凑的层次布局

    I produce the following PDF with dot 我的主要问题是即使打印出来 字符尺寸也太小A3 此外 图表似乎还可以变得更紧凑 例如 左上角的蓝色 绿色和棕色节点的存在扩展了宽度 但我看不出为什么整个前两行不能向右
  • 如何在电报Python机器人中保存照片?

    我想写一个保存照片的电报机器人 这是我的代码 但它不起作用 我不知道我的问题是什么 def image handler bot update file bot getFile update message photo file id pri
  • Sprite Kit 和播放声音导致应用程序终止

    使用ARC 只是我遇到的一个问题 我有一个 SKScene 在其中使用 SKAction 类方法播放声音效果 SKAction playSoundFileNamed sound wav waitForCompletion NO 现在 当我尝
  • 在 Rails 3 中设置会话超时

    这看起来很简单 我试图让 Rails Active Record 会话在 2 分钟后超时 因此 两分钟后我希望我的用户必须重新登录 我只是在跑步rails server 即 WebBrick 在我的本地开发机器上 我知道这与以下代码有关co
  • 您可以使用异步函数通过 useState 设置初始状态吗

    我的组件依赖于本地状态 useState 但初始值应该来自http响应 我可以传递一个异步函数来设置初始状态吗 如何从响应中设置初始状态 这是我的代码 const fcads gt let good Axios get admin geta
  • 如何在Java中实现行级安全性?

    我目前正在评估身份验证 授权框架 Apache Shiro 看起来很好 但我是缺少行级安全性特征 例如 数据库中可能存在特殊行 这些行只能由具有特殊权限的用户可见和访问 为了避免不必要的往返 我们当前修改 SQL 查询以与我们的授权数据连接
  • 我可以更改 PyCharmProjects 的位置/名称吗?

    我在 Ubuntu 12 04 上使用 PyCharm 3 0 它自动创建了一个名为的文件夹 PyCharmProjects用于存储项目文件夹 是否有可能 更改此文件夹的位置 更改此文件夹的名称 我在界面 JetBrains 网站或设置文件
  • mPDF - 基于元素高度的分页符

    我在用着mpdf在 Laravel 和这个包4 0版本 问题是我有一个不同高度的问题列表 其中有 4 个选项 而且我不知道每个 div 标签的确切高度和近似高度 其中有哪些问题和答案选项 我不想要我的某些部分转到另一个页面的问题 我的问题的
  • html5shiv 无法在 IE8 中运行?

    我无法在 IE8 中使用 HTML5 元素获取样式 我已经搜索过 stackoverflow 和 Google 没有任何建议我尝试过工作 我从一个更复杂的页面开始 我正在将 XHTML 框架转换为 HTML5 并且没有丝毫担心 但是在模拟和
  • 在(c#)库中使用 List 与 LinkedList 的性能差异是什么[重复]

    这个问题在这里已经有答案了 可能的重复 什么时候应该使用 List 和 LinkedList 这个问题与我之前合并的问题有关 与列表与链表 如果我不希望对我的数据结构使用按索引访问 那么通过使用 LinkedList 而不是 List 可以
  • C++ 程序因 std::bad_alloc 而终止,但 valgrind 报告没有内存泄漏

    我的程序失败并显示 std bad alloc 错误消息 该程序是可扩展的 因此我使用 valgrind 在较小的版本上进行了测试 并且没有内存泄漏 这是统计力学的应用 所以我基本上制作了数百个对象 更改它们的内部数据 在本例中为双精度的
  • 应用程序池启动模式:OnDemand 与 AlwaysRunning,哪个最好?

    我的应用程序池一直使用 OnDemand 启动模式 但最近我听说 AlwaysRunning 模式 它允许部署到 IIS 的 ASP NET 应用程序在部署后立即可用 启用此功能似乎会导致 IIS 在应用程序部署后立即启动该应用程序 从而消
  • python:绑定如何工作

    我想了解 python 中的变量绑定到底是如何工作的 让我们看看这个 def foo x def bar print y return bar y 5 bar foo 2 bar 这打印 5 对我来说似乎是合理的 def foo x def