当前位置: 首页 > 面试题库 >

Python:list.extend和list .__ iadd__之间的区别

路扬
2023-03-14
问题内容

我以为list.extend和列表上的“ + =”基本上可以做同样的事情-扩展列表而不创建新列表。

我希望可以打印以下代码,[42, 43, 44, 45, 46]但是UnboundLocalError: local variable 'x' referenced before assignment

为什么我收到此错误?区别在哪里?

def f():
    x.extend([43, 44])
def g():
    x += ([45, 46])
x = [42]
f()
g()
print x

我在python2.7.3和python3.4.0中进行了尝试。


问题答案:

+=使对象有 机会 就地更改对象。但这取决于的类型x,这并不意味着对象已就地更改。

这样,+= 仍然需要重新分配x;要么x.__iadd__()返回x或新对象返回; x += something确实翻译成:

x = x.__iadd__(something)

由于+=包含作业,因此在中x被标记为本地g()

x.extend()另一方面,这不是一项任务。程序员已决定x始终是带有.extend()方法的对象,并直接使用它。Python看不到分配,x并标记为全局。



 类似资料:
  • 问题内容: Java Generic type:之间有什么区别 根据我的理解 (1) 是具有超类“ Number”的“未知”数据类型的只读列表。我们只能读取元素,但不能添加 (2) 具有超类“ Number”的数据类型列表。我们可以 阅读并将 元素 添加 到列表中 请参见下面的代码示例 当我尝试将Integer(甚至Number对象)添加到sumOfList2时,出现错误。请在这里说明问题是什么?

  • 问题内容: 有人可以解释这个代码吗? 输出: 问题答案: 将对象转换为列表时,它仅使用键。 但是,如果用方括号将其包围,则所有内容都将保持不变,只会使其成为s的列表,其中仅包含一项。 这是因为,当您使用循环遍历时,它也只使用了键: 但是,如果要获取键 和 值,请使用: 使用循环: 但是,当您输入时,它会为您提供: 有点误导:)

  • 问题内容: 我想知道和之间有什么区别。我知道最后一个是常规的ID分配,但第一个看起来不同。有什么特别之处? 我在哪里看到的: 我正在研究ListView,ListAdapter之类的东西,作者在布局xml文件中定义了ListView,如下所示: 我也要提一下id 他还扩大了课堂。 这是文章的出处。 还有我在想什么问题: 我们应该扩展吗?也许我想要一个还包含其他视图的活动。 我们只是因为扩展而使用,

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:

  • 问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。