”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?

Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?

发布于2024-11-08
浏览:534

How do chained assignments work in Python? Are they truly equivalent to multiple sequential assignments?

理解 Python 中的链式赋值

Python 中的链式赋值,例如“x = y = somefunction()”这样的表达式,引发了人们的关注关于它们与多个顺序赋值的等价性的讨论(“x = somefunction(); y = somefunction()”)。为了澄清这个问题,让我们详细探讨一下链式赋值的操作。

在链式赋值中,首先分配最左边的目标。因此,“x = y = somefunction()”相当于:

temp = somefunction()
x = temp
y = temp

这个顺序至关重要,因为左侧的目标在分配给右侧的目标之前接收临时变量“temp”的值。这在链式赋值函数的反汇编中很明显:

>>> def chained_assignment():
...     x = y = some_function()
...
>>> import dis
>>> dis.dis(chained_assignment)
  2           0 LOAD_GLOBAL              0 (some_function)
              3 CALL_FUNCTION            0
              6 DUP_TOP
              7 STORE_FAST               0 (x)
             10 STORE_FAST               1 (y)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE

请注意,函数返回的值首先存储在“x”中,然后存储在“y”中。

这种理解对于理解链式赋值的行为至关重要。例如,应避免使用“x = y = []”这样的表达式,因为“x”和“y”都引用同一个列表。相反,支持单独的赋值,例如“x = []”和“y = []”来创建不同的列表。

最新教程 更多>
  • 以下是一些符合条件的标题选项:

**选项 1(关注问题):**

* **如何在 Python 中创建真正不可变的对象:超越基础**

**选项 2(突出显示解决方案)
    以下是一些符合条件的标题选项: **选项 1(关注问题):** * **如何在 Python 中创建真正不可变的对象:超越基础** **选项 2(突出显示解决方案)
    Python 中的不可变对象:超越基本解决方案虽然标准元组类提供了不可变性,但本文探讨了创建不可变对象的更高级技术重写 __setattr__:一种有限的方法一个常见的解决方案是重写 setattr 方法。但是,即使在 init 函数中,这也会阻止属性设置。因此,它可能并不适合所有场景。子类化元组:...
    编程 发布于2024-11-08
  • Spring Boot:如何解决跨源问题
    Spring Boot:如何解决跨源问题
    跨源问题描述 您可能会遇到以下错误消息: 被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头 此错误表示对某个地址的请求已被 CORS 协议阻止,因为资源中缺少 Access-Control-Allow-Origin 标头。 ...
    编程 发布于2024-11-08
  • 处理日期和时区转换:为什么正确的 UTC 转换很重要
    处理日期和时区转换:为什么正确的 UTC 转换很重要
    在检索选定日期范围内的数据时,我们注意到我们的计算存在一定偏差。然而,当我们将日期减少一天时,数据完全匹配! 嗯……我们的代码中处理日期的方式可能存在问题。也许时区处理不正确——是的,我是对的! 当构建涉及来自不同时区的用户的应用程序时,正确处理日期可能很棘手。在 UTC 中存储日期是确保一致性的...
    编程 发布于2024-11-08
  • gRPC:你住在哪里?你吃什么?
    gRPC:你住在哪里?你吃什么?
    A primeira vez que ouvi falar sobre RPC foi em uma aula de sistema distribuídos, ainda quando estava cursando a graduação em Ciência da Computação. Ac...
    编程 发布于2024-11-08
  • 如何为 3D 模型实现平滑的切线空间法线?
    如何为 3D 模型实现平滑的切线空间法线?
    如何实现平滑的切线空间法线修复由于切线、副法线的每面计算而导致的模型的多面外观,和法线向量,必须考虑模型预先提供的法线。每顶点法线平均第一种方法涉及计算每面法线和将其分布在形成面的顶点之间。每个顶点维护一个初始值为零的累加器向量,并且将面法线的 X、Y 和 Z 分量添加到每个涉及顶点的累加器中。此外...
    编程 发布于2024-11-08
  • 通过简单示例了解 JavaScript 中的调用、应用和绑定
    通过简单示例了解 JavaScript 中的调用、应用和绑定
    通过简单示例了解 JavaScript 中的调用、应用和绑定 使用 JavaScript 时,您可能会遇到三种强大的方法:调用、应用和绑定。这些方法用于控制函数中 this 的值,从而更轻松地处理对象。让我们通过简单的示例来分解每种方法,以了解它们的工作原理。 1....
    编程 发布于2024-11-08
  • 大括号放置对 JavaScript 执行有什么影响?
    大括号放置对 JavaScript 执行有什么影响?
    大括号放置和 JavaScript 执行在 JavaScript 中,大括号的放置可以显着改变代码的行为和输出。如提供的代码片段所示,大括号位置的单个更改可能会导致截然不同的结果。自动分号插入和未定义返回当左大括号时被放置在一个新行上,如第一个代码片段中一样,自动分号插入开始。这是 JavaScri...
    编程 发布于2024-11-08
  • 学习弹性搜索
    学习弹性搜索
    Elasticsearch 是一个基于 Apache Lucene 库构建的强大开源搜索和分析引擎。它旨在处理大量数据并有效执行复杂的搜索。 Elasticsearch 的主要特性和功能包括: 分布式架构:Elasticsearch是一个分布式系统,可以水平扩展以处理大量数据和流量。 近实时搜索:E...
    编程 发布于2024-11-08
  • 股息率:基于Python的金融项目的重要指标
    股息率:基于Python的金融项目的重要指标
    股息率:基于Python的金融项目的重要指标 在财务分析领域,股息对许多投资者来说非常重要。特别是如果您正在开发一个处理财务数据或自动化投资策略的Python项目,计算和分析股息率可能是一个关键要素。这篇关于股息率的 Rankia 文章详细解释了该利率的运作方式以及为什么它对投资者...
    编程 发布于2024-11-08
  • 如何通过并行或分布式测试在多个浏览器中执行WebUI功能文件?
    如何通过并行或分布式测试在多个浏览器中执行WebUI功能文件?
    使用并行或分布式测试在多个浏览器中执行 WebUI 功能文件使用并行测试对多个浏览器 (Zalenium) 执行 WebUI 功能文件运行器或分布式测试,使用以下方法:并行运行器和场景大纲:使用场景大纲创建一个表,其中的行代表不同的浏览器配置。向 Karate-config.js 文件添加并行运行器...
    编程 发布于2024-11-08
  • 如何使用 CSS 自定义文本下划线颜色?
    如何使用 CSS 自定义文本下划线颜色?
    使用 CSS 自定义文本下划线颜色在网页设计中,为文本添加下划线是强调或突出显示信息的常见做法。但是,如果您想通过更改下划线的颜色来添加独特的触感该怎么办?这可能吗?是的,可以使用 CSS 更改文本下方线条的颜色。您可以使用以下两种方法:方法 1:使用 text-decoration-color最直...
    编程 发布于2024-11-08
  • 在 JavaScript 中实现点击劫持防御技术
    在 JavaScript 中实现点击劫持防御技术
    点击劫持等复杂攻击的出现使安全成为当今网络世界的首要问题。通过欺骗消费者点击与他们最初看到的内容不同的内容,攻击者部署了一种名为“点击劫持”的邪恶方法,这可能会带来灾难性的后果。此类攻击有可能诱骗人们下载恶意软件、发送私人信息,甚至做他们无意的事情,例如购买任何东西。为了防止此类攻击,JavaScr...
    编程 发布于2024-11-08
  • 为什么我的浮动 Div 不调整后续 Div 的大小?
    为什么我的浮动 Div 不调整后续 Div 的大小?
    Float 不调整 Div 大小之谜当使用 CSS float 时,假设后续元素将左对齐而不是流到新的元素上线。然而,在某些情况下,例如提供的示例,下面的 div 继续跨越整个宽度,而不是从第一个 div 的右侧开始。为了理解这种行为,我们深入研究 float 的复杂性定位。当元素浮动时(在本例中为...
    编程 发布于2024-11-08
  • 使用 PYTHON 将数据导入 MYSQL
    使用 PYTHON 将数据导入 MYSQL
    介绍 手动将数据导入数据库,尤其是当数据库中有多个表时,不仅很烦人,而且还很耗时。通过使用 python 库可以使这变得更容易。 从kaggle下载绘画数据集。绘画数据集由 8 个 csv 文件组成,我们将使用简单的 python 脚本将其导入到数据库中,而不是手动将数据导入到数据...
    编程 发布于2024-11-08
  • MySQL 基本运算符及其应用
    MySQL 基本运算符及其应用
    MySQL 运算符是开发人员的关键工具,可实现精确的数据操作和分析。它们涵盖了一系列功能,包括赋值、数据比较和复杂模式匹配。无论您是处理 JSON 数据还是根据条件过滤记录,了解这些运算符对于高效的数据库管理都至关重要。 本指南介绍了最重要的MySQL运算符,并通过实际示例演示了如何使用它们,使开...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3