add 和 iadd 之间的区别?

2023-11-21

我不明白 iadd、imul 等就地运算符的用途。

许多操作都有“就地”版本。以下功能 为就地运算符提供比通常更原始的访问 语法确实如此;例如,语句 x += y 相当于 x = 运算符.iadd(x, y)。另一种表达方式是 z = operator.iadd(x, y) 等价于复合语句 z = x; z + = y。

似乎我总是可以互换使用就地运算符或常规运算符。这个比那个好吗?


不可变对象的“就地”函数不能使用就地算法,而对于可变对象则可能是。简单的事实是,不可变的对象不会改变。

否则,在考虑可变对象时,使用“就地”函数与非“就地”函数会产生深远的影响。考虑以下:

>>> A = [1,2,3]
>>> B = A
>>> id(A)
4383125944
>>> id(B)
4383125944
>>> A = A + [1]
>>> id(A)
4383126376
>>> A += [1]
>>> id(A)
4383126376

假设您正在编写一些代码,其中假设 B 是 A 的软副本(可变对象)。如果在修改 A 时不使用“就地”功能,则可能会悄悄错过对 B 的所需修改。更糟糕的是,对代码的快速目视检查看起来代码(例如,A = A + [2])已正确实现(也许在数学上是有意义的)。如果确实只想修改一个对象而不接收新对象,那么“就地”函数是正确的选择。

两者都不比另一个更好。相反,在某些特定情况下,其中一种可能会优于另一种。

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

add 和 iadd 之间的区别? 的相关文章

随机推荐

  • 动态添加/删除输入时清除输入值[重复]

    这个问题在这里已经有答案了 我有输入元素 单击按钮时可以清除值 此输入还可以动态添加或删除输入元素 但我坚持添加输入元素后 清除按钮不起作用 这是我到目前为止尝试过的 ADD Remove input var counter 1 custo
  • MVC 5 访问声明身份用户数据

    我正在开发一个MVC 5网络应用程序使用实体框架 5 数据库优先方法 我在用OWIN用于用户的身份验证 下面显示了我的帐户控制器中的登录方法 public ActionResult Login LoginViewModel model st
  • Angular 包是如何构建的

    Angular 构建生成了哪些不同的文件 我注意到其中有 6 个 main js polyfill js runtime js scripts js vendor js styles js 我想 Angular 使用webpack进行构建
  • invokeAll() 是 java 7 中的阻塞调用

    ExecutorService executorService Executors newSingleThreadExecutor Set
  • HTML5 FormData 在 Java Servlet request.getParameter() 中返回 null

    我的观点是 HTML 5 我正在使用 FormData 向 Servlet 发送 AJAX 2 POST 在 servlet 内部 我试图读取请求参数 我看不到任何参数 但是 Google Chrome 开发控制台会显示请求负载 如何在 S
  • 导入在 Colab 中与您共享/由您共享的 Google 云端硬盘文件

    相当明显的是 这simplest推荐的方式还提供了最简单的 API 用于从驱动器文件夹中读取文件 from google colab import drive drive mount content gdrive 不允许访问 Google
  • 引用可能比指针更有效吗?

    我想知道有时 取决于平台或编译器或代码中的上下文等 引用是否比指针更有效 引用可能比指针更有效吗 不 不必要 标准也没有这么说 大多数编译器通过使用指针来实现引用机制 添加了对 C 的引用以支持运算符重载而不是为了效率
  • 为什么我必须使用[ProtoIninclude]?

    我读过很多关于 protobuf net 继承功能的问题 我只是想知道是否可以像使用 ProtoContract ProtoMember 一样使用 DataContract DataMember 为什么我不能使用 KnowType 而不是使
  • 意外的观察:数组的 var_dump() 正在标记引用的元素...从什么时候开始?

    我刚刚对数组运行了一些简单的调试测试 并注意到当我对数组执行 var dump 时 输出会标记数组中由另一个变量引用的任何元素 作为一个简单的实验 我运行了以下代码 array range 1 4 var dump array echo b
  • UItableView 在滚动时加载数据

    在我的应用程序中 我从网络服务获取数据 并且必须在 UITableView 中显示它 但这里的条件是我最初只能显示 10 条记录 然后一旦用户向下滚动我就必须加载更多记录 我尝试搜索它但没有得到任何有用的答案 我同意我将使用 void ta
  • 直接索引 numpy 数组的时间复杂度是多少

    我假设当有一个 numpy 数组时 比方说 gt gt gt gt nArray array 23425 521331 40625 23465 521246 03125 23505 528602 8125 23545 531934 75 2
  • 为什么 print 函数返回 None?

    为什么外层print在此代码中显示None gt gt gt a print print Python Python None gt gt gt print type a
  • 在 iPhone SDK 中创建自定义活动指示器?

    我还没有找到任何使用自定义活动指示器的应用程序 将是老式的动画 GIF 来代替 Apple 提供的旋转轮 是否有工具可以做到这一点 或子类 UIActivityIndi catorView 开发人员是否滚动自己的 UIView 或者这是否违
  • 具有代码完成功能的最小 PHP IDE? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有很多小型编辑器 例如 Notepad vim 和 SciTE 但它们一次只能处理一个文件 换句话说 他们不知道代码库的整个范围 另一方面 我见过的
  • 使用 fputcsv 从多维数组创建 CSV

    我正在尝试将多维数组放入 csv 文件中 数组中的数据是这样的 Array 0 gt Array product id gt 1111 name gt Alcatel One Touch Idol 2 keyword gt alcatel
  • C++11 的 std::string 的底层表示形式是否保证具有终止空字符? [复制]

    这个问题在这里已经有答案了 首先摘录一些标准 规格string operator const reference 运算符 size type pos const 引用运算符 size type pos Requires pos Return
  • time.time() 无法在 Cython 中运行 while 循环预定时间

    我有一个 Python 模块 其中包含一个 while 循环 该循环应该运行固定的时间 我通过向 time time 的输出添加一个常量并运行直到 time time 大于该变量来完成此操作 这没有出现任何问题 但同样的事情在 Cython
  • 如何使用相机测量物体的高度、宽度和距离? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我引用了很多链接 但我仍然无法从中得到任何可以开始我的开发的信息 我想用相机测量图像的高
  • 使用预处理器将 JSON 作为字符串嵌入到 C++ 代码中

    我在 Chromium 项目中看到了 C 和 JSON 代码的混合 例如在这个文件中 配置 software rendering list json cc 这个宏有魔力吗 define LONG STRING CONST VA ARGS 它
  • add 和 iadd 之间的区别?

    我不明白 iadd imul 等就地运算符的用途 许多操作都有 就地 版本 以下功能 为就地运算符提供比通常更原始的访问 语法确实如此 例如 语句 x y 相当于 x 运算符 iadd x y 另一种表达方式是 z operator iad