这可能是一个愚蠢的问题,但看看操作符到函数的映射,我注意到没有函数来表示而不是
操作符。起初,我认为这可能是因为解释器只是将其重新排序为
而不是y中的x
,但是有一个函数用于不是
,它的行为应该与
不在
中的行为完全相同。是我遗漏了什么,还是那个操作员真的不存在?
这里有一个非常愚蠢的例子,你可能想要这个:
def compare_iter(a,b,func):
return [func(aa,bb) for aa,bb in zip(a,b)]
my_compare=compare_iter(xx,yy,lambda x,y:x not in y) #lambda -- yuck
my_compare=map(operator.not_,compare_iter(xx,yy,operator.contains) #extra map? grr...
#it would be nice to do: my_compare=compare_iter(xx,yy,operator.not_contains)
当然,我可以为此编写自己的函数,但这样做会付出效率上的代价,而操作符模块可以将此代码从python中推出,因此执行速度更快。
您可能会发现以下函数和反汇编有助于理解运算符:
>>> def test():
if 0 in (): pass
if 0 not in (): pass
if 0 is (): pass
if 0 is not (): pass
return None
>>> dis.dis(test)
2 0 LOAD_CONST 1 (0)
3 LOAD_CONST 2 (())
6 COMPARE_OP 6 (in)
9 POP_JUMP_IF_FALSE 15
12 JUMP_FORWARD 0 (to 15)
3 >> 15 LOAD_CONST 1 (0)
18 LOAD_CONST 3 (())
21 COMPARE_OP 7 (not in)
24 POP_JUMP_IF_FALSE 30
27 JUMP_FORWARD 0 (to 30)
4 >> 30 LOAD_CONST 1 (0)
33 LOAD_CONST 4 (())
36 COMPARE_OP 8 (is)
39 POP_JUMP_IF_FALSE 45
42 JUMP_FORWARD 0 (to 45)
5 >> 45 LOAD_CONST 1 (0)
48 LOAD_CONST 5 (())
51 COMPARE_OP 9 (is not)
54 POP_JUMP_IF_FALSE 60
57 JUMP_FORWARD 0 (to 60)
6 >> 60 LOAD_CONST 0 (None)
63 RETURN_VALUE
>>>
正如您所看到的,每个操作符都有差异;它们的代码(顺序)是6、7、8和9。
匿名用户
这里不需要另一个函数not in
与中的相反,因此有以下映射:
obj in seq => contains(seq, obj)
obj not in seq => not contains(seq, obj)
你是对的,这与is
/is not
不一致,因为身份测试应该是对称的。这可能是一个设计工件。
问题内容: 我来自ac风格语言,因此我很自然地使用不相等的语言,但是当我使用Python时,从我阅读的文档中我了解到为此目的使用了运算符。 最近,我看到了很多使用的代码,所以我的问题是,其中之一比其他的更受青睐,还是其中之一被弃用了。 另外,我想知道它们之间是否有任何区别。 问题答案: 蟒2只支持 两个 ,在Python 3的操作者已被删除。 两者之间没有区别,但是是首选形式。
问题内容: 我注意到我可以使用运算符比较所有本机数据类型(整数,字符串,布尔值,浮点数等),还可以比较包含本机数据类型的列表,元组,集合和字典。在这些情况下,操作员将检查两个对象是否相等。但是在某些其他情况下(试图比较我创建的类的实例),该运算符只是检查两个变量是否引用同一对象(因此在这些情况下,该运算符等效于该运算符) 我的问题是:什么时候操作员不只是比较身份? 编辑:我正在使用Python 3
主要内容:+ 加法运算符,- 减法运算符,*乘法运算符,/ 和 // 除法运算符,% 求余运算符,** 次方(乘方)运算符算术运算符也即数学运算符,用来对数字进行数学运算,比如加减乘除。下表列出了 Python 支持所有基本算术运算符。 表 1 Python 常用算术运算符 运算符 说明 实例 结果 + 加 12.45 + 15 27.45 - 减 4.56 - 0.26 4.3 * 乘 5 * 3.6 18.0 / 除法(和数学中的规则一样) 7 / 2 3.5 // 整除(只保留商的整数部分
实际上,三元运算符的语言示例中是否有一个内置的不是以下形式的(条件运算符)? 我不是在找一种特定的语言,虽然至少有中等程度的流行度会更好。
问题内容: 有人可以解释一下SQL中的以下行为吗? 问题答案: 是标准SQL-92;是等效的。两者都评估值,但不是-是占位符,表示不存在值。 这就是为什么您只能在此类情况下使用/作为谓词的原因。 此行为不特定于SQL Server。所有符合标准的SQL方言都以相同的方式工作。 注意 :要比较如果您的 值不为null ,请使用,而要与 不为null 值进行比较,请使用。我不能说我的值是否等于NULL
问题内容: 有两个不等于运算符-和。 它们之间有什么区别?我听说这比其他字符串比较有效。任何人都可以对此声明做出定性评论。 问题答案: 它们是相同的(与第三种形式一样)。 不过请注意,从解析器的角度来看,它们仍然被认为是不同的,这是为将不匹配或定义的存储轮廓。 这不像在解析器对待和还在分析阶段,所以你不能超载,并为不同的运营商。