熟悉Python内部原理(CPython或其他实现)的任何人都可以解释为什么列表添加必须是同质的:
In [1]: x = [1]
In [2]: x+"foo"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\Users\Marcin\<ipython-input-2-94cd84126ddc> in <module>()
----> 1 x+"foo"
TypeError: can only concatenate list (not "str") to list
In [3]: x+="foo"
In [4]: x
Out[4]: [1, 'f', 'o', 'o']
为什么上面的脚本x+"foo"
返回的值不等于x
上面的脚本的最终值?
这个问题来自NPE的问题:Python列表+
=可迭代的行为在任何地方都有记录吗?
更新:我知道不需要异类+=
工作(但是确实如此),同样,也不需要异类+
是错误。这个问题是关于为什么要选择后者。
可以说,将序列添加到列表的结果是不确定的。如果这是一个充分的反对意见,那么防止异类是有意义的+=
。Update2:特别是,python始终将运算符调用委派给左手操作数,因此不会出现“什么是正确的事情”的问题”:始终由左手对象管理(除非将其委托给右边)。
Update3:对于任何认为这是设计决定的人,请解释(a)为什么没有记录在案;或(b)有文件证明的地方。
Update4:“应该[1] + (2, )
返回什么?” 它应该返回一个等于紧随在后的x
初始值的变量值。这个结果是明确的。[1]``x+=(2, )
这些错误报告表明此设计怪癖是一个错误。
问题12318:
是的,这是预期的行为,是的,这是不一致的。
很久以来就是这样,Guido表示他不会再这样做了(这在他的遗憾清单中)。但是,我们不会通过更改代码来破坏代码(
list.__iadd__
工作方式类似于list.extend
)。
问题575536:
目的是
list.__iadd__
完全对应于list.extend()
。也不用list.__add__()
过于笼统
:这是一个功能,那些不想对像Martin这样的示例感到惊讶的人可以通过使用简单+
的列表来避免它们。
(当然,我们当中有些人发现这种行为非常令人惊讶,包括打开该错误报告的开发人员)。
(感谢@Mouad找到了这些)。
问题内容: Java Bean是否必须实现接口? 问题答案: 这是Javabeans规范中描述的“典型”功能之一。 这是第 2.1 章的摘录 什么是bean? 各个Java Bean支持的功能会有所不同,但是区分Java Bean的典型统一功能是: 支持“自省”,以便构建器工具可以分析bean的工作方式 支持“自定义”,以便在使用应用程序构建器时,用户可以自定义Bean的外观和行为。 支持“事件”
在Scala表示法中,是一个函数,它接受任何类型并将其映射到所有列表类型集合中的一个类型,例如它将类型映射到类型并映射上的函数 到 到 现在,的每个实例都是一个monoid,具有函数(在Haskell中为)和函数(在Haskell中为)。我的猜测是,可以使用列表是单ID这一事实来说明必须映射列表的所有元素。我在这里的感觉是,如果从Applicative中添加函数,就会得到一个列表,其中只有一个其他
根据我在文档中的理解,每次实例化ViewModel的视图(使用前面的代码)被破坏时,我都应该删除观察者,对吗?但是,一旦视图被销毁(因为ViewModel实例在视图中被实例化,也将被销毁),观察者不应该被销毁吗?
我发现谷歌标签管理器(GTM)周围的谷歌留档在帮助我弄清楚哪些比特去哪里方面很糟糕。 据我所知,GTM要求你把一个
问题内容: 每个人都告诉我“使用super.viewDidLoad()因为它就是这样”或“我一直那样做,所以要保留它”,“如果不叫super就是错误的”等。 我只发现了一些有关Objective-C用例的主题,这些主题并没有那么启发性,但是我正在Swift 3中进行开发,所以有什么专家可以给我一个很好的详细解释吗? 这是一种良好实践的案例还是有任何隐藏的影响? 问题答案: 通常,最好为您覆盖的所有
问题内容: 我们都知道,为了调用,必须将此调用放置在同步块中,否则将引发。但是,进行此限制的原因是什么?我知道这释放了监视器,但是为什么我们需要通过使特定的块同步来显式获取监视器,然后通过调用来释放监视器? 如果可以在同步块之外调用并保留其语义-挂起调用者线程,可能造成什么损害? 问题答案: 只有在还存在时,才有意义,因此它始终与线程之间的通信有关,并且需要同步才能正常工作。有人可能会争辩说这应该
在 Scala 规范中,据说在类模板中 每个trait引用mti必须表示一个trait。相比之下,超类构造函数sc通常指的不是trait的类。可以编写以trait引用开头的父类列表,例如mt1 with......与mtn。在这种情况下,父类列表被隐式扩展以包括mt1的超类型作为第一个父类型。新的超类型必须至少有一个不带参数的构造函数。在下面,我们将始终假设已经执行了这个隐式扩展,因此模板的第一个
问题内容: 有时我们有几个类,这些类的某些方法具有相同的签名,但是与声明的Java接口不对应。例如,和(在中的其他几个 )中都有一个方法 现在,假设我希望对具有该方法的对象进行一些操作。然后,我想有一个接口(或者自己定义),例如 这样我可以写: 但是,可悲的是,我不能: 此演员表将是非法的。编译器 知道 这 是不是 一个,因为类没有宣布实现该接口...... 然而“实际上”实现它 。 有时这会带来